在mongostat锁定%是什么意思?

Modified on: Wed, 14 Aug 2019 03:00:02 +0800

当运行mongostat来查看我们的mongo数据库时,我会经常看到锁定的%数字跳跃,有时高达80%。这是一些示例行:

insert  query update delete getmore command flushes mapped  vsize    res faults locked % idx miss %     qr|qw   ar|aw  netIn netOut  conn       time 
 0     10      7      0       0      17       0  2.27g     5g  1.63g      0      0.1          0       0|0     0|0    22k     7k    83   15:46:10 
 0     21      7      1       0      23       0  2.27g     5g  1.73g      0      0.1          0       0|0     0|1    11k   424k    83   15:46:11 
 0     28     10      3       0      28       0  2.27g     5g  1.73g      0     26.9          0       0|0     0|0    33k   196k    83   15:46:12 
 0     17      6      3       0      13       0  2.27g     5g  1.72g      0     18.2          0       0|0     0|0    11k    10k    83   15:46:13 
 0     18      5      1       0      11       0  2.27g     5g  1.73g      0      0.1          0       0|0     0|0    23k   362k    83   15:46:14 

mongostat的帮助说它是

  

已锁定 - 全局写锁定的时间百分比

我的理解是写入会锁定整个数据库。如果我在同一个mongo服务器(A和B)上有两个数据库,那么A块上的写入会写在B上吗?在一个数据库上有一半的时间意味着它会显示25%(比如在双核盒子上使用一个核心的一半),还是会显示50%?

作者:edebill

最佳答案

是的,MongoDB使用全局写锁定(服务器范围),因此mongostat报告的“lock%”表示服务器在上一个采样周期(一秒)内在全局写锁定中花费的总时间 - 对于所有dbs上的所有操作。

当您执行更多写入操作(如更新,插入,删除和逐出)时,此值将会增加。

上面示例中的数字对于独立服务器而言并不令人担忧。

然而,80%的定期读数表明您可能希望在更多服务器之间平衡读取和写入,或者对您的集合进行分片,尽管我会考虑使用分片来缓解性能问题之前的存储问题。

通常,优化的关键包括正确和全面的索引,限制结果,使用分析器和explain()来揭示瓶颈,并确保您正确使用驱动程序(尝试使用游标批量大小可以产生显着的改进)。

作者:,user94876

相关问答

添加新评论