相关疑难解决方法(0)

为什么 MongoDB 在某些查询上如此缓慢,而使用 IXSCAN 作为获胜计划?

我的数据库有大约 30M 记录,集合大小约为 100GB(总文档和索引)。

\n\n

我有一个复合索引,可以根据 user_id 和其他一些字段(例如:is_activeis_logged_in等)过滤数据。

\n\n

我发现MongoDB Compass查询速度很慢,大约需要 10 秒、20 秒甚至 40 秒!我运行了完全相同的查询,并且在不到 500 毫秒的时间内获取结果(尽管它可能会在第二次尝试时被缓存)。

\n\n

当我获得该持续统计op数据时,我会看到以下锁定状态:

\n\n
 "lockStats": {\n         "Global": {\n             "acquireCount": {\n                 "r": 574\n             }\n         },\n         "MMAPV1Journal": {\n             "acquireCount": {\n                 "r": 295\n             },\n             "acquireWaitCount": {\n                 "r": 2\n             },\n             "timeAcquiringMicros": {\n                 "r": 15494\n             }\n         },\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n

acquireCount:与具有以下状态的快速查询(在另一个集合上)相比,操作在指定模式下获取锁的次数如此之高:

\n\n
"lockStats": {\n         "Global": {\n             "acquireCount": {\n                 "r": 2\n             }\n         },\n         "MMAPV1Journal": {\n             "acquireCount": {\n                 "r": 1\n             }\n         },\n …
Run Code Online (Sandbox Code Playgroud)

performance index mongodb query-performance

5
推荐指数
1
解决办法
6072
查看次数

标签 统计

index ×1

mongodb ×1

performance ×1

query-performance ×1