可以在Mongo中删除缓存吗?

时间:2018-05-30 12:39:52

标签: mongodb mongodb-query query-cache

我的情况是我在Mongo中运行了几个查询并测量了响应时间。我知道Mongo使用Memory Mapped文件并在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中的缓存结果?

0 个答案:

没有答案