MongoDB Secondary 延时高(同步锁)事例剖析51CTO博客 - 众发娱乐

MongoDB Secondary 延时高(同步锁)事例剖析51CTO博客

2019年03月04日13时46分47秒 | 作者: 嘉熙 | 标签: 同步,索引,运用 | 浏览: 3052

遇到问题:晚10点,DBA在数据库树立了某collection的索引。在之后的几分钟,恰巧有搭档拜访某运用,验证该运用的账号需从数据库某表查询账号密码。导致了无法查询,搭档无法登录上运用。问题便反应到了运维部。


布景介绍:

    Mongodb版别 3.0.2

    建索引和collection和账号查询collection地点同一台服务器,不同库名上。

    因运用的是mongodb3.0.2,之前了解到3.0是行级锁,所以dba在建该表索引时,并未加参数background:true。


查原因:

    搭档无法登录运用的时刻点恰巧是该库有建索引的时刻段。所以首要排查在索引上。后来经过复现问题,确认了该问题。


当主库开端建索引时,主库的读写是正常的。运用能够正常拜访。但当主库索引树立完结,Secondary 拉取到一批 oplog 后,从库开端重放oplog时,此刻就有一个特别 Lock::ParallelBatchWriterMode 的锁,这个锁会堵塞一切的读恳求。 这就解说了为什么在建索引之后的 几分钟,运用无法拜访。


后查阅了材料:

  • 尽量防止脏读,等一批 oplog 重放完后,这批数据才答应用户读到。

  • 尽量确保同步功能,想象一下,假如重放 oplog 时,运用一般的锁,那么 oplog 的重放就需要跟正常的读写竞赛锁资源,假如 Secondary 上有很多的读,那么势必会形成备同步逐渐跟不上。


尽管3.0版别的读写锁没有对数据库形成堵塞,但不要疏忽同步锁 Lock::ParallelBatchWriterMode的影响。


解决问题:

在数据库尽量闲暇的状态下建索引;

在建索引时,最好仍是加上 background:true。


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表众发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章