前情提要 11月末我司商品服务的MongoDB主库曾出现过严重抖动.频繁锁库等情况. 由于诸多业务存在插入MongoDB.然后立即查询等逻辑,因此项目并未开启读写分离. 最终定位问题是由于:服务器自身磁盘 + 大量慢查询导致 基于上述情况,运维同学后续着重增强了对MongoDB慢查询的监控和告警 幸运的一点:在出事故之前刚好完成了缓存过期时间的升级且过期时间为一个月,C端查询都落在缓存上,因此没有造成P0级事故,仅仅阻塞了部分B端逻辑 事故回放 我司的各种监控做的比较到位,当天突然收到了数据库服…
摘要: 对于MongoDB的多键查询,创建复合索引可以有效提高性能. 什么是复合索引? 复合索引,即Compound Index,指的是将多个键组合到一起创建索引,这样可以加速匹配多个键的查询.不妨通过一个简单的示例理解复合索引. students集合如下: db.students.find().pretty(){ "_id" : ObjectId("5aa7390ca5be7272a99b042a"), "name" : "zhang…
可以很明显可以看到我们这个集合的数据严重分布不均匀. 一共有8个分片,面对这个情况我首先想到的是手动拆分数据块,但这不是解决此问题的根本办法. 造成此次生产事故的首要原因就是片键选择上的问题,由于片键选择失误,在数据量级不大的时候数据看起来还是很健康的,但随着数据量的暴涨,问题就慢慢浮出了水面,我们使用的组合片键并不是无规律的,片键内容是线性增长的,这就导致了数据的不正常聚集.由于数据分布不均匀,我们有两个分片的磁盘使用率接近80%,数据还在持续增长,这个问题必须尽快解决. 涉及到此次事故的集合…
更新时间:2018年03月26日 10:17:37   作者:Fundebug    我要评论 对于MongoDB的多键查询,创建复合索引可以有效提高性能.这篇文章主要给大家介绍了关于MongoDB复合索引的相关资料,文中通过示例代码介绍的非常详细,对大家的学习   为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样适用于其他的数据库比如mysql). ? 1 2 3 4 5 6 mongo-955…
最新在做一个项目,由于查询字段较多,且查询较频繁,所以我做了一个复合索引,将所有需要查询的字段都做到索引里,做了一个名为s_1_m_1_c_1_v_1_year_1_month_1_week_1_day_1_hour_1_minute_1的索引. 我要查询的字段一般都是s,m,c,v这四个,一般是一起使用,这么久以来,也没碰到过什么问题,忽然间,我有一次在查询s,c这二个字段的时候,用了explain()查看效率,忽然间,看到了我在老版本中不可思异的东西,他居然使用了索引. 跳过了m这个字段,继…
1.事故描述 本月 8 日上午十点多,我们的基础应用发生生产事故.具体表象为系统出现假死无响应.查看事发时间段的基础应用 error 日志,没发现明显异常.查看基础应用业务日志,银行结果处理的部分普遍很慢,大都在十分钟以上. 2.AWR 报告 向 DBA 要了一下那个时间段的 AWR 报告,发现以下三个地方有些异常: 2.1.CPU 利用率过高 如上图所示,CPU利用率:1883.25分钟DB时间/(16核心*119.45分钟采样时间段时间) = 98.54%,CPU 利用率过高. 2.2.行锁…
关于MongoDB中索引文档的一个问题? - To illustrate index intersection, consider a collection orders that has the following indexes: { qty: 1 } { item: 1 } MongoDB can use the intersection of the two indexes to support the following query: db.orders.find( { item: "…
当我们的查询条件不只有一个时,就需要建立复合索引,比如插入一条{x:1,y:2,z:3}记录,按照我们之前建立的x为1的索引,可是使用x查询,现在想按照x与y的值查询,就需要创建如下的索引     创建复合索引 > db.test2.ensureIndex({x:1,y:1}) { "createdCollectionAutomatically" : false, , , } 查询索引 > db.test2.getIndexes() [ { , "key"…
查看语句执行计划: explain() 在mongodb3+版本后输出格式发生改变: 详情参见:https://docs.mongodb.com/v3.0/reference/method/cursor.explain/ 查看执行耗时:db.collection名称.find().explain('executionStats') 一,索引介绍 mongodb具有两类索引,分别为单键索引和复合索引. 1.单键索引是最简单的一种索引,创建单键索引的开销要比复合索引小很多.单键索引主要用于针对单值查…