在诊断高CPU的mongodb时,我们发现了许多缓慢(6-7秒)的查询。所有这些都与"ns“有关:"mydb.$cmd”。
慢查询条目如下所示:
{
"_id" : ObjectId("5571b739f65f7e64bb806362"),
"op" : "command",
"ns" : "mydb.$cmd",
"command" : {
"aggregate" : "MyCollection",
"pipeline" : [
{
"$mergeCursors" : [
{
"host" : "abc:27005",
"id" : NumberLong(82775337156)
}
]
}
]
},
"keyUpdates" : 0,
"numYield" : 0,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(12),
"w" : NumberLong(0)
},
"timeAcquiringMicros" : {
"r" : NumberLong(2),
"w" : NumberLong(2680)
}
},
"responseLength" : 12312,
"millis" : 6142,
"execStats" : {},
"ts" : ISODate("2015-06-05T12:35:40.801Z"),
"client" : "1.1.1.1",
"allUsers" : [],
"user" : ""}
我们不确定是哪部分代码导致了这些查询。我们应该如何继续查找/调试来自应用程序的哪些查询导致这些$cmd慢查询?
发布于 2015-06-23 06:52:42
这些日志实际上是对指定数据库(在本例中为mydb)运行command时发出的查询。因此,这只是针对您的MongoDB运行的某个聚合命令。
如果您的应用程序没有直接执行此操作,则似乎(如http://dbattish.tumblr.com/post/108652372056/joins-in-mongodb中所述)从v2.6开始使用$mergecursors变体来合并跨分片的查询。
发布于 2015-06-23 02:12:38
我的测试显示,MongoDB在处理并发请求时总是使用大约90-100%的CPU。这是因为我搬到了MySQL。我的应用程序使用thame simple查询的速度是MySQL的3倍,而且我使用的CPU要少得多。我将很快创建一个完全测试的artciel。现在,只需查看MongoDB和MariaDB的CPU使用率,就可以查询X=5、10、25、50、100、500、1000个并发连接。
siege -b -cX -t1M url正如我所认识到的,高CPU使用率与高CPU使用率无关。我的意思是,即使是非常简单的并发请求查询也会使MongoDB占用100%的CPU。
所有测试使用1 1vCPU和1 1Gb内存,连接池大小为10
MongoDB

MySQL

我用不同的配置(4vCPU,6G内存)做了很多测试,MongoDB总是比MySQL使用更多的CPU。您可以尝试使用MongoDB:
我对读取数据的MongodDB感到非常失望。MySQL不仅使用更少的CPU,而且总是至少快3倍!
https://stackoverflow.com/questions/30670510
复制相似问题