关于MongoDB缓存数据的一些困惑

发布于 2022-09-06 02:35:27 字数 1225 浏览 18 评论 0

使用mlogfilter查看索引使用效率不高的MongoDB查询语句 如下所示

2017-10-28T06:40:08.791+0000 I COMMAND [conn4431] command foo.data_02 command: find { find: "data_02", filter: { $and: [ ... ] }, projection: { ...}, limit: 50, shardVersion: [ Timestamp 0|0, ObjectId('000000000000000000000000') ] } planSummary: IXSCAN { field1: -1.0, field2: -1.0 } keysExamined:589735 docsExamined:589735 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:4610 nreturned:0 reslen:217 locks:{ Global: { acquireCount: { r: 9222 } }, Database: { acquireCount: { r: 4611 } }, Collection: { acquireCount: { r: 4611 } } } protocol:op_command 8785ms

扫描了58万多条记录,却返回了0条 我想知道像这种情况MongoDB到底是怎么缓存数据的呢?

即只缓存返回结果(0) 还是所有扫描的记录呢(589735)。从内存的角度来说的话, 是返回结果越少内存占用越小 还是 扫描记录越少 内存占用越小?

另外WiredTiger又分两种缓存

  • WiredTiger internal cache
  • filesystem cache

这两个缓存是怎么分配的呢?

  • 是internal cache 满了再用filesystem cache呢?
  • 还是同时都有分配呢? 那么这种情况下 什么数据进internal cache 什么数据进filesystem cache呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

遥远的绿洲 2022-09-13 02:35:27

扫描记录少占用的内存肯定少

返回结果越少内存占用越少,这个不太肯定。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文