将新项目添加到集合后,为什么我的MongoDB查询变慢?

恩林

在这方面的任何帮助将不胜感激。

我有一个很大的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我将新项目添加到List <string>并将其添加到列表的底部?

来自分类Dev

为什么我无法将 CSV 文件中的新项目添加到 PHP 的 while 循环内的数组中?

来自分类Dev

我将新项目添加到ObservableCollection后,ListView不会立即更新

来自分类Dev

为什么我的表单不将新项目添加到列表中?

来自分类Dev

使用MongoDB将新项目添加到数组

来自分类Dev

为什么条件表达式将新项目添加到列表视图

来自分类Dev

为什么在将新项目添加到列表时将其替换为索引0的项目,而不是在末尾添加新项目?

来自分类Dev

将项目添加到DataBound集合时,为什么视图没有更新?

来自分类Dev

如何使用反射将新项目添加到集合中

来自分类Dev

如何正确地将新项目添加到集合中?

来自分类Dev

将新项目添加到自定义类的 Observable 集合中

来自分类Dev

将多个OR条件添加到索引列后,MySQL查询变慢

来自分类Dev

将多个OR条件添加到索引列后,MySQL查询变慢

来自分类Dev

将现有项目添加到新项目

来自分类Dev

将项目添加到ViewModel中的属性后,为什么observableArray无法实现视图?

来自分类Dev

Android:将新项目添加到列表后,在ListView中单击NullPointerException onItemClick

来自分类Dev

MongoDB > 将新项目添加到数组内的对象中

来自分类Dev

查询后MongoDB将匹配的键添加到列表

来自分类Dev

将选定的项目添加到集合

来自分类Dev

我们如何使用cJSON将新项目添加到已解析的JSON中?

来自分类Dev

将新项目添加到我的ComboBox潜在客户中。例外

来自分类Dev

为什么我可以将项目添加到列表中但不能重新分配?

来自分类Dev

为什么将文件添加到app目录会使服务器变慢?

来自分类Dev

将新项目添加到对象数组

来自分类Dev

Android-将新项目添加到MutableLiveData并观察

来自分类Dev

将AFNetworking添加到新项目时出现错误

来自分类Dev

如何将新项目添加到srt文件

来自分类Dev

recyclerview 在将新项目添加到列表时刷新

来自分类Dev

Powershell 将新项目添加到 Enum 列表

Related 相关文章

  1. 1

    为什么我将新项目添加到List <string>并将其添加到列表的底部?

  2. 2

    为什么我无法将 CSV 文件中的新项目添加到 PHP 的 while 循环内的数组中?

  3. 3

    我将新项目添加到ObservableCollection后,ListView不会立即更新

  4. 4

    为什么我的表单不将新项目添加到列表中?

  5. 5

    使用MongoDB将新项目添加到数组

  6. 6

    为什么条件表达式将新项目添加到列表视图

  7. 7

    为什么在将新项目添加到列表时将其替换为索引0的项目,而不是在末尾添加新项目?

  8. 8

    将项目添加到DataBound集合时,为什么视图没有更新?

  9. 9

    如何使用反射将新项目添加到集合中

  10. 10

    如何正确地将新项目添加到集合中?

  11. 11

    将新项目添加到自定义类的 Observable 集合中

  12. 12

    将多个OR条件添加到索引列后,MySQL查询变慢

  13. 13

    将多个OR条件添加到索引列后,MySQL查询变慢

  14. 14

    将现有项目添加到新项目

  15. 15

    将项目添加到ViewModel中的属性后,为什么observableArray无法实现视图?

  16. 16

    Android:将新项目添加到列表后,在ListView中单击NullPointerException onItemClick

  17. 17

    MongoDB > 将新项目添加到数组内的对象中

  18. 18

    查询后MongoDB将匹配的键添加到列表

  19. 19

    将选定的项目添加到集合

  20. 20

    我们如何使用cJSON将新项目添加到已解析的JSON中?

  21. 21

    将新项目添加到我的ComboBox潜在客户中。例外

  22. 22

    为什么我可以将项目添加到列表中但不能重新分配?

  23. 23

    为什么将文件添加到app目录会使服务器变慢?

  24. 24

    将新项目添加到对象数组

  25. 25

    Android-将新项目添加到MutableLiveData并观察

  26. 26

    将AFNetworking添加到新项目时出现错误

  27. 27

    如何将新项目添加到srt文件

  28. 28

    recyclerview 在将新项目添加到列表时刷新

  29. 29

    Powershell 将新项目添加到 Enum 列表

热门标签

归档