mongostat 中的锁定百分比是什么意思?

mongostat 中的锁定百分比是什么意思?

当运行 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%?

答案1

是的,MongoDB 使用全局写锁(服务器范围),因此 mongostat 报告的“锁定 %”表示服务器在最后一个采样周期(一秒)内花在全局写锁上的总时间——针对所有数据库上的所有操作。

随着您执行更多的写入操作(例如更新、插入、删除和评估),这个值将会增加。

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

不过,如果定期读取 80%,则表明您可能需要在更多服务器上平衡读写操作或对集合进行分片,不过我会先使用分片来缓解存储问题,然后再解决性能问题。

一般来说,优化的关键包括正确而全面的索引、限制结果、使用分析器和 explain() 来发现瓶颈,以及确保您正确使用驱动程序(尝试使用光标批量大小可以产生显着的改进)。

答案2

高写入锁定百分比并不是性能的唯一指标。您应该将此数字与写入队列相结合,写入队列指示了排队获取锁定的插入/更新/更新插入和删除操作的数量(总计)。如果这两个数字一直居高不下,则存在问题,应立即解决。如果是这种情况,请先找出最慢的查询,进行分析并尝试对其进行调整。当无法进一步调整时,请转向服务器上分配的资源。

相关内容