在这方面的任何帮助将不胜感激。
我有一个很大的Mongodb集合,用于存储用户活动。它具有多个要运行的查询的复合索引,通常查询性能非常好,并且用户活动流会立即加载。
但是,最近我添加了一个后台任务,该任务每2小时将20k条记录添加到集合中(每位用户一条新记录)。自从添加此任务以来-我注意到在添加这些记录之后我第一次访问活动流时,页面加载之前会有很大的延迟。然后,当我刷新页面时,它会快速加载。
似乎新项目只是在我尝试访问它们之后才添加到索引中。但是从我在MongoDB FAQ上阅读的内容来看-它们会自动添加到索引-http://docs.mongodb.org/manual/faq/indexes/#should-you-run-ensureindex-after-every-insert。也许只是没有添加它们的情况?
这是我的收款统计信息(如果有帮助的话)。
Array
(
[ns] => main.activities
[count] => 26280825
[size] => 3234981772
[avgObjSize] => 123.09285465734
[storageSize] => 4211892224
[numExtents] => 30
[nindexes] => 20
[lastExtentSize] => 844685312
[paddingFactor] => 1.001
[systemFlags] => 1
[userFlags] => 0
[totalIndexSize] => 25240448464
[indexSizes] => Array
(
[_id_] => 946551872
[portfolio_id_1_type_1_timestamp_-1] => 1519746704
[project_id_1_type_1_timestamp_1] => 1839902512
[project_id_1] => 1148997808
[piece_id_1] => 792794016
[user_id_1_type_1_timestamp_-1] => 1903806128
[type_1_timestamp_-1] => 1475522720
[user_id_1_type_1] => 1440243280
[project_id_1_type_1] => 1394008000
[project_id_1_type_1_timestamp_1_project_page_timestamp_1] => 2114419888
[project_id_1_type_1_project_page_timestamp_1] => 1564649296
[conversation_id_1] => 870670416
[project_comment_id_1] => 814640288
[project_comment_id_1_type_1] => 1032408048
[reply_to_comment_id_1] => 512324512
[collection_id_1] => 822996160
[user_id_1] => 1233578528
[portfolio_id_1] => 852691392
[type_1_user_id_1] => 1477182448
[type_1_user_id_-1] => 1483314448
)
[ok] => 1
)
我认为最可能的答案是,后台任务导致文档在添加新文档时内存不足。第二个请求很快,因为您只是将文档拉到内存中。没有更多有关文档和正在执行的查询的详细信息,很难确定。
如果您在第一次加载页面时运行mongostat并看到许多错误,那么您需要更多的内存。
您可以通过删除一些索引来找回一点内存。具体而言,可以删除以下索引,因为它们是另一个索引的公共前缀:
[project_id_1] => 1148997808
[user_id_1_type_1] => 1440243280
[project_id_1_type_1] => 1394008000
[project_comment_id_1] => 814640288
[user_id_1] => 1233578528
[portfolio_id_1] => 852691392
这些索引中的一个也可能会被删除,因为它们仅在最后一个字段的方向上有所不同。唯一不正确的情况是您的应用程序使用{type:1,user_id:1}和{type:1,user_id:-1}作为排序文档来对查询结果进行排序。
[type_1_user_id_1] => 1477182448
[type_1_user_id_-1] => 1483314448
根据正在执行的实际查询,还有一些其他索引可以删除。
HTH-Rob。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句