1

访问者数量的增加会导致在 MongoDB 上发出的命令数量增加。这使得数据库变慢并且整个系统无法使用。Mongostat 在那些高峰时期看起来像这样:

insert  query update delete getmore command flushes mapped  vsize    res faults locked % idx miss %     qr|qw   ar|aw  netIn netOut  conn       time
 0    266      0      0       3      19       0  58.7g   119g    13g      2        0          0       0|0     0|0    47k     1m   167   14:24:30
 0    308      4      0       0       8       0  58.7g   119g    13g      5      0.7          0       0|0     0|0    54k   880k   167   14:24:31
 0    177      3      0       0      34       0  58.7g   119g    13g      0      0.5          0       0|0     0|0    49k   559k   173   14:24:32
 0     73      2      0       0       8       0  58.7g   119g    13g      0      0.3          0       0|0     0|0    21k   288k   174   14:24:33
 0    201      5      0       0      27       0  58.7g   119g    13g      2      0.5          0       0|0     1|0    51k   639k   167   14:24:34
 0    232      4      0       0       9       0  58.7g   119g    13g      1      0.3          0       0|0     0|0    44k   456k   167   14:24:35
 0    102      2      0       0     109       0  58.7g   119g  13.1g      0      0.3          0       0|0     0|0    33k   269k   193   14:24:36
 0    265      3      0       0     103       0  58.7g   119g  13.1g      0      0.5          0       0|0     0|0    76k   714k   178   14:24:37
 1    277      4      0       0      16       0  58.7g   119g  13.1g      2      0.5          0       0|0     0|0    71k   501k   180   14:24:38
 0    237      3      0       0      92       0  58.7g   119g  13.1g      0      0.4          0       0|0     0|0    54k   670k   201   14:24:39

问题是:我在我的代码中找不到这些命令的来源。我尝试打开完整的分析(记录所有查询),但找不到任何这些命令。我看到一些,但每秒只有几个,通常的东西。有时几分钟内每秒有 100-200 个命令,但我在日志和分析器中看到的只是身份验证命令(这是 php 脚本在超时后重新连接)。

如何调试此问题并找到太多命令的来源?

4

1 回答 1

0

命令可以是很多东西,包括 getLastError()、count()、分片或复制相关的命令。大多数命令(例如 count)不应该真正影响性能。其他人喜欢 group 或 distinct 可能会。但是它们应该出现在您已经提到的分析器日志中。mongostat 输出中的查询数量不是很令人印象深刻。如果每个查询都被索引,MongoDB 处理它们应该不会有任何问题。您确定问题真的是数据库而不是您的应用程序代码或其他正在运行的进程吗?

于 2013-04-16T19:11:34.730 回答