我有一个单实例mongodb,它的集合包含3个字段:_id、block_id、负载。
在集合上有一个二级索引:
{ "v" : 1, "key" : { "block_id" : 1, "_id" : -1 },
"ns" : "testdb.testdev", "name" : "_block_id_id" }我做了很多查询,比如:
query: { query: { block_id: 868413 }, orderby: { _id: -1 } } ntoreturn:1 nscanned:1 nreturned:1 reslen:4166 163ms在这些过程中没有其他查询。当我按顺序阅读block_id时,它比使用随机block_id查询时快10倍。我的cpu使用率很低,内存利用率很低。该集合比内存大小大2-3倍。
这里的瓶颈是什么?
发布于 2012-08-08 17:51:52
这里有几件事要澄清:
就统计数据而言,有两种基本的方法来获得它们。首先,也是最快的,是蒙哥特和蒙哥托。这两个实用程序附带了MongoDB,可以用来确定您的数据库要做什么。
另一种选择是彩信 ( MongoDB监视服务)--它是免费的,它允许您随着时间的推移绘制所有相关的统计数据,因此当您看到慢度时,您可以确定什么是尖峰/下降。如果您沿着这个路径(请参阅MMS )安装munin,我建议安装它,因为它将为您提供IO统计数据和MongoDB统计数据的视图。
您通常会查找以下内容之一:
还有很多其他的事情要看,但考虑到你的描述,这是一个很好的开始。请记住,如果您有内存争用,新的东西越有可能已经在内存中。由于您使用的是顺序ID,所以我希望旧ID(除非最近更新或触摸)比新ID更多地出现在慢速查询日志中(这是操作系统通常管理内存的方式--请参阅LRU获取更多信息)。
在解决这类性能问题方面,除了添加更多RAM外,您还应该查看:
https://serverfault.com/questions/415515
复制相似问题