在诊断高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慢查询的应用程序的查询?
答案 0 :(得分:1)
这些日志实际上是针对指定数据库运行command时发出的查询(在您的情况下为mydb)。因此,这只是针对MongoDB运行的一些聚合命令。
如果您的应用程序没有直接执行此操作,则会出现(如http://dbattish.tumblr.com/post/108652372056/joins-in-mongodb中所述)从v2.6使用$ mergecursors变量来跨分片合并查询。
答案 1 :(得分:-1)
我的测试显示MongoDB在处理并发请求时总是使用~90-100%的CPU。这是因为我转向MySQL。使用简单查询的我的应用程序使用MySQL工作速度提高了3倍,而且我使用的CPU更少。我很快就会通过全面测试来创造一个艺术品。现在,只需查看MongoDB和MariaDB的CPU使用率,即X = 5,10,25,50,100,500,1000并发连接的查询。
siege -b -cX -t1M url
据我所知,高CPU使用率与高CPU使用率无关。我的意思是,即使是非常简单的并发请求查询也会使MongoDB使用100%的CPU。
所有使用1vCPU和1Gb内存且连接池大小为10的测试
MongoDB的
的MySQL
我使用不同的配置(4vCPU,6G内存)进行了很多测试,并且MongoDB总是使用比MySQL更多的CPU。您可以尝试使用MongoDB:
我对MongodDB读取数据非常失望。不仅MySQL使用更少的CPU,它总是至少快3倍!