首页 > 解决方案 > 是否可以在 Mongo 中删除缓存?

问题描述

我的情况是我在 Mongo 中运行了几个查询并测量响应时间。我知道 Mongo 使用内存映射文件并将一些数据缓存在 RAM 中。

如果我创建索引并运行查询,则执行时间为 2.07 秒。当我再次运行查询时,执行时间为 0,017 秒。

这意味着文件在第一次访问时由操作系统映射到内存中,并且操作系统会将其保存在缓存中,直到它决定将其分页。

因为我想做一些基准测试,所以我想以某种方式从内存中删除映射的结果。

free -g:

               total       used       free     shared    buffers     cached

Mem:            29          29          0          0          0         29
-/+ buffers/cache:          0         29
Swap:            0          0          0

我尝试db.collection.getPlanCache().clear()但它不起作用。

然后我尝试:

sudo service mongod stop

我重新启动我的机器

sync; echo 3 > /proc/sys/vm/drop_caches
sudo service mongod start

免费-g:

               total       used       free     shared    buffers     cached

Mem:            29          0          0          0          0         0
-/+ buffers/cache:          0         29
Swap:            0          0          0

在上面似乎缓存现在是免费的。但是当我再次执行查询时,执行时间是 0,017 秒。似乎 mongo 已经设法在某处缓存或保存数据。当我清除缓存时,所需的执行时间为 2.07 秒。

mongostat给出:

insert query update delete getmore command flushes mapped  vsize   res faults qr|qw ar|aw netIn netOut conn set repl     time
*0    *0     *0     *0       0     1|0       0 124.0G 248.9G 27.7G      1   0|0   0|0   79b    11k   13 rs0  PRI 12:37:06
*0    *0     *0     *0       1     5|0       0 124.0G 248.9G 27.7G      0   0|0   0|0  687b    11k   13 rs0  PRI 12:37:07
*0    *0     *0     *0       2     1|0       0 124.0G 248.9G 27.7G      0   0|0   0|0  173b    11k   13 rs0  PRI 12:37:08
*0    *0     *0     *0       1     5|0       0 124.0G 248.9G 27.7G      0   0|0   0|0  687b    11k   13 rs0  PRI 12:37:09
*0    *0     *0     *0       0     1|0       0 124.0G 248.9G 27.7G      0   0|0   0|0   79b    11k   13 rs0  PRI 12:37:10

谁能告诉我如何才能真正删除 Mongo 中的缓存结果?

标签: mongodbmongodb-queryquery-cache

解决方案


推荐阅读