Mongodb
是否可以在 Mongo 中刪除記憶體?
我的情況是我在 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 MongoDB和Collection-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