Performance

Mongodb內部記憶體的使用百分比

  • March 3, 2022

我已經在具有相同環境/設置 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,而不是作為服務)
  1. 是什麼導致了記憶體百分比使用率和吞吐量的差異?MongoDB 在需要時使用文件系統和 WiredTiger 的記憶體
  2. 顯式更改此設置是否安全,以便 Mongodb 使用更多記憶體?是的。更改記憶體設置是完全安全的
  3. 我可以從命令行更改此設置嗎?設置已在儲存選項下的 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 中執行操作的應用程序執行緒(例如執行插入的執行緒)幫助記憶體驅逐(可能涉及刷新到磁碟)在允許之前做這項工作。這充當了一種內置的節流機制,以確保儲存引擎和磁碟不會被傳入的工作過度淹沒

謝謝!

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