В моем случае я запускаю несколько запросов в Mongo и измеряю время отклика.Я знаю, что Mongo использует файлы Memory Mapped и кэширует некоторые данные в ОЗУ.
Если я создаю индекс и выполняю запрос, время выполнения составляет 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 секунды.Кажется, Монго удалось где-то кешировать или сохранить данные.При очистке кеша желаемое время выполнения составит 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
Может кто-нибудь сказать мне, как я могу на самом деле удалить кэшированные результаты вМонго?