MongoDB實例的IOPS使?率是?個?常重要的監控指標。如果MongoDB實例的IOPS使?率達到或接近100%,會導致業務響應緩慢,甚?業務不可?。本文介紹查看MongoDB實例IOPS使用率的方法,以及導致IOPS使用率高的原因和優化策略。
背景信息
?般云數據庫廠商為了避免宿主機出現I/O爭搶,會使?CGroup( Control Groups )等技術進?實例間的I/O隔離和IOPS(Input/Output Operations Per Second)限制,即不同規格的實例配置對應不同的IOPS使?上限。
注意事項
MongoDB單節點架構實例、4.2版本副本集云盤版實例以及4.2版本分片集群云盤版實例暫不支持查看IOPS使用量和IOPS使用率。
目前上述架構的實例在控制臺監控信息頁面的監控指標IOPS使用量和IOPS使用率一直顯示為0,無法代表真正的IOPS監控數據。
查看IOPS使用率
您可以通過監控圖查看IOPS使用率
登錄MongoDB管理控制臺,在基本信息頁面的規格信息區域,確認該實例的最?IOPS上限。不同實例規格對應的IOPS使?上限請參見:實例規格概述。
登錄MongoDB管理控制臺,在監控信息頁面,根據監控指標IOPS使用量和IOPS使用率來確認該實例的最?IOPS上限。?部分情況下阿?云數據庫MongoDB的data?錄和log?錄使?同?塊盤,所以IOPS使?量=data_iops+log_iops。
I/O問題的常見原因
常見導致MongoDB磁盤I/O問題的可能原因如下:
內存不夠。I/O問題與內存的CacheSize??息息相關。CacheSize越?,表示能夠緩存的熱數據越?,即系統需要的磁盤I/O量越低,則出現I/O瓶頸的概率越低;反之,CacheSize越?,表示能夠緩存的熱數據越少,系統刷臟更加頻繁,則出現I/O瓶頸的概率越?。
與磁盤I/O相關的參數和配置問題。例如MongoDB Journal和運??志頻繁刷新,寫入安全機制(WriteConcern)設置不合理,分?集群的MoveChunk錯誤等。
關于更多Journal內容可參考:Journaling。
關于更多WriteConcern內容可參考:Write Concern。
I/O問題的優化策略
如果是阿里云MongoDB,建議您根據業務需求選擇合適的實例規格,并關注索引的優化和部分應用系統的寫入優化。
配置合適的實例規格
由于在配置前很難預估熱數據與CacheSize的?例設置為多少最合適,通常情況下,在保證MongoDB實例滿?業務要求的情況下,確保每日的最高CPU使?率和IOPS使?率控制在50%以內即可。
索引優化
查詢全表掃描或使用了不恰當的索引,例如導出全表數據期間,會消耗大量的I/O。創建過多的索引會使數據規模很大,導致WiredTiger Cache緩存的熱數據減少,業務數據寫操作過程中需要多?次I/O操作以更新索引,從而影響I/O性能。為了避免以上情況,建議您創建合適的索引,詳情請參見Indexes。
業務架構和運維優化
在業務架構層?,要避免磁盤I/O成為瓶頸,需要優化以下幾個方面:
控制并發寫入/讀取線程數
MongoDB是多線程應用,過?的并發寫入速度和復雜查詢并發數,容易引起IOPS瓶頸,甚?導致Secondary節點持續延遲。如果I/O瓶頸是由于業務寫?量導致,建議您將MongoDB實例升級至MongoDB分?集群模式,通過數據的?平拆分來線性擴容MongoDB的寫?性能。
盡可能避免峰值寫?
部分業務由于定期寫入或數據批量持久化,容易造成IOPS峰值。針對這種情況,在當前的實例配置不?以?撐該峰值寫?的情況下,建議您將業務側改造為平滑寫入,例如給每?個批量寫?操作添加?個隨機時間?。
避免業務?峰期間做運維操作
部分對性能影響較?的運維操作,從本質上講也會造成IOPS峰值。如果必須執行此類操作,建議您在業務低峰期執行。容易引起I/O?峰的常見操作有批量寫?、更新、刪除數據,添加索引,對集合執?Compact操作,批量導出數據等。