Mongodb

是否可以在 Mongo 中刪除記憶體?

  • February 7, 2022

我的情況是我在 Mongo 中執行了幾個查詢並測量響應時間。我知道 Mongo 使用記憶體映射文件並將一些數據記憶體在 RAM 中。

如果我創建索引並執行查詢,則執行時間為 2.07 秒。當我再次執行 qeury 時,執行時間為 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 秒。

誰能告訴我如何才能真正刪除 Mongo 中的記憶體結果?

根據 MongoDB 文件,此處 **PlanCache.clear()**刪除了集合的所有記憶體查詢計劃。

該方法僅適用於特定集合的計劃記憶體對象;IE

db.collection.getPlanCache().clear()

所需訪問權限

在使用授權執行的系統上,使用者必須具有包含planCacheWrite操作的訪問權限。

供您進一步參考Manage Users and Roles in MongoDBCollection-Level Access Control in MongoDB

這將為您提供使用 MongoDb 記憶體的所有可能選項。

db.referenceDataPoints.getPlanCache().help(); 

計劃記憶體幫助

`db.referenceDataPoints.getPlanCache().help()` - show PlanCache help
`db.referenceDataPoints.getPlanCache().listQueryShapes()` - displays all query shapes in a collection
`db.referenceDataPoints.getPlanCache().clear()` - drops all cached queries in a collection
`db.referenceDataPoints.getPlanCache().clearPlansByQuery(query[, projection, sort, collation])` - drops query shape from plan cache
`db.referenceDataPoints.getPlanCache().getPlansByQuery(query[, projection, sort, collation])` - displays the cached plans for a query shape

引用自:https://dba.stackexchange.com/questions/208232