我的数据库有大约 30M 记录,集合大小约为 100GB(总文档和索引)。
\n\n我有一个复合索引,可以根据 user_id 和其他一些字段(例如:is_active
、is_logged_in
等)过滤数据。
我发现MongoDB Compass
查询速度很慢,大约需要 10 秒、20 秒甚至 40 秒!我运行了完全相同的查询,并且在不到 500 毫秒的时间内获取结果(尽管它可能会在第二次尝试时被缓存)。
当我获得该持续统计op
数据时,我会看到以下锁定状态:
"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\nacquireCount
:与具有以下状态的快速查询(在另一个集合上)相比,操作在指定模式下获取锁的次数如此之高:
"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)