Performance
Mongodb內部記憶體的使用百分比
我已經在具有相同環境/設置 AFAIK 的 MongoDB 伺服器上進行了兩次性能測試。我發現吞吐量相差 10%。
當我檢查 mongostat 日誌時,我發現在第一次測試中吞吐量更快的 Mongodb 使用了 95% 的 cache_size。在第二次測試中,它保持在 80%。
我在兩次執行之間重新啟動了伺服器系統,但沒有更改伺服器或客戶端的任何設置。mongodb 日誌在兩個測試中報告完全相同的設置:
First test: 2019-08-14T00:42:32.588-0400 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=96122M,cache_overflow=(file_max=0M),session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress), Second test (after reboot): 2019-08-14T01:11:15.722-0400 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=96122M,cache_overflow=(file_max=0M),session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
這是第一個測試的 mongostat 範例:
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time *0 104209 *0 *0 0 9|0 0.0% 94.9% 0 96.7G 94.7G 107|0 128|0 27.0m 40.2m 272 Aug 14 00:51:13.759 *0 102610 *0 *0 0 0|0 0.0% 94.9% 1 96.7G 94.6G 109|0 128|0 26.6m 39.6m 272 Aug 14 00:51:44.092 *0 104724 *0 *0 0 9|0 0.0% 94.9% 0 96.7G 94.6G 87|0 128|0 27.1m 40.4m 272 Aug 14 00:52:13.767
以及來自第二個測試的樣本:
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time *0 94009 *0 *0 0 9|0 0.0% 80.9% 1 83.1G 80.9G 127|0 81|0 24.4m 36.3m 272 Aug 14 01:17:29.289 *0 93680 *0 *0 0 0|0 0.0% 80.3% 0 83.1G 81.0G 0|0 107|0 24.3m 36.2m 272 Aug 14 01:17:59.119 *0 93068 *0 *0 0 9|0 0.0% 80.9% 1 83.1G 81.0G 130|0 128|0 24.1m 35.9m 272 Aug 14 01:18:29.123 *0 92599 *0 *0 0 0|0 0.0% 80.0% 0 83.1G 80.9G 137|0 128|0 24.0m 35.8m 272 Aug 14 01:18:59.186
- 是什麼導致了記憶體百分比使用率和吞吐量的差異?
- 明確更改此設置是否安全,以便 Mongodb 使用更多記憶體?
- 我可以從命令行更改此設置嗎?(我從命令行啟動 mongodb,而不是作為服務)
- 是什麼導致了記憶體百分比使用率和吞吐量的差異?MongoDB 在需要時使用文件系統和 WiredTiger 的記憶體
- 顯式更改此設置是否安全,以便 Mongodb 使用更多記憶體?是的。更改記憶體設置是完全安全的
- 我可以從命令行更改此設置嗎?設置已在儲存選項下的 mongod 配置文件中完成
請參閱以下連結,了解您應該如何決定記憶體大小 https://docs.mongodb.com/manual/faq/storage/
類似於以下內容:
storage: engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 7
謝謝!
-Anban
預設情況下,在 MongoDB 3.6.4 中,WiredTiger 將嘗試將臟百分比(記憶體中修改數據的大小相對於配置的記憶體大小)保持在配置的記憶體大小的 5% 以下,並且整體記憶體使用率低於配置的記憶體大小的 80% . 預設記憶體大小在文件中的WiredTiger 記憶體中進行了描述
一旦百分比超過這些數字,WiredTiger 將更加努力,通過使想要在 WiredTiger 中執行操作的應用程序執行緒(例如執行插入的執行緒)幫助記憶體驅逐(可能涉及刷新到磁碟)在允許之前做這項工作。這充當了一種內置的節流機制,以確保儲存引擎和磁碟不會被傳入的工作過度淹沒
謝謝!