MongoDB优化之二:常见优化方法
四個方面進行 cpu/io 方面的優化處理:
1.集群架構上進行讀寫分離。所有查詢優先考慮在從庫上讀取,寫操作在主庫上執行。避免主庫混合讀寫壓力過大,也減少主庫上讀寫記錄的鎖沖突。
connection string中readPreference 設置成secondarypreferred,C++ 驅動版本升級為3.1.3 mongo-cxx-driver(驅動升級,讀寫分離才生效) 。
2.熱表msg_traces 索引優化
針對該慢查詢創建聯合索引 {"_id": 1, "account": 1, "app_key": 1, "s_pc": 1}。
3.mongodb 歷史數據歸檔和刪除
和開發同事溝通,根據實際業務需求,保留msgs、msg_traces 集合中一年左右的文檔。在timestamp 字段上創建TTL索引。設置文檔的過期時間為 3153600秒(365*24*3600)。
db.msgs.createIndex( { "timestamp ": 1 }, { expireAfterSeconds: 3153600 },{background: true} )
db.msg_traces.createIndex( { "timestamp ": 1 }, { expireAfterSeconds: 3153600 },{background: true} )
mongodb TTL索引將每隔60秒對過期數據執行一次刪除操作。刪除操作的持續實際取決于mongod 實例的負載。
4 .journal 日志的 commitIntervalMs 參數調整。
從默認的100ms調大到500ms。
目前通過讀寫分離和索引優化之后,原來分片1在業務高峰期間的cpu load 值由最高值250降低到5以內,優化效果非常明顯。
mongodb 分片集群優化思路總結:
分片集群中出現某個分片負載特別高的情況。(往往是某個分片負載高,如果是多個分片節點負載都高,則需要逐個進行分析)
第一步:
首先通過top、iostat、vmstat、mongostat 等工具了解系統大致并發負載和讀寫比例,觀察系統具體瓶頸所在。
第二步:
如果負載只是集中出現在某一個節點上,則通過 mongotop 工具先分析該mongodb實例的熱點表是哪些并記錄下來。
第三步:
通過 mlogfilter / mloginfo 工具分析業務高峰期間出現的TOP10 慢查詢。
第四步:
定位需要優化的目標表,并進行查詢優化。
通常第二步和第三步會出現很多相同的表。因為熱點數據表和慢查詢表往往存在相同的一些表。這些表就是我們需要優化的目標。
mongodb 分片表的優化大致從以下幾方面著手:
1.查看表分片鍵、數據分布、數據總量、數據占用空間等信息。著重看數據分片鍵設置是否合理、數據分布是否均勻;
2.mloginfo 工具打印出來的慢查詢信息中有每個慢查詢的查詢條件。確認慢查詢表上是否有合適的索引滿足查詢條件執行。需要結合explain() 分析慢查詢的具體執行計劃。
3.選取業務高峰階段的mongodb實例原始日志,搜索慢查詢表相關的原始查詢語句。記錄這些原始查詢語句,方便后續與開發同事溝通,看能否從業務場景上進行相應的優化。
4.對于日志、事件、會話信息等日志類型的表,可以按照業務需求,根據事件字段,只保留一定時間內的有效數據。通常這要與開發業務
溝通清楚。確認保留時間后,可以利用mongodb TTL索引特性,在特定時間字段上創建索引,設置記錄過期時限。
第五步:
架構上做讀寫分離優化
如果在第三步找出來的 TOP10 慢查詢不少是能有效利用索引的簡單查詢,正常情況下,執行應該很快(200ms之內)。
則需要考慮在架構上做讀寫分離的優化。因為熱點表高并發的讀寫會讓cpu 忙不過來,導致原本正常的查詢都出現阻塞。
總之,mongodb 優化關鍵之處是找出系統瓶頸和問題根源。定位出需要優化的目標表后,簡單地加個索引或者做個讀寫分離,性能問題往往就迎刃而解。
這個和醫生看病頗為相似,通過望聞問切和各種醫療檢驗設備所反饋的數據和報告,再依據豐富的臨床經驗診斷出病因所在。找出病因后,開什么方子用什么藥就是水到渠成的事了。當然,醫生看病比給數據庫做性能診斷復雜多了,誤診幾率也不小。而且,數據庫性能優化沒找準原因還有不少試錯的機會,但是醫生試錯成本就比較高了。所以當個好醫生貌似比做個好DBA更難!
以上插了些題外話。優化上過程中,也需要和開發同事保持有效溝通。當我們理解慢查詢產生的業務場景后,有時讓開發同事配合做個簡單的功能優化,頭痛的性能問題也能隨之解決。
轉載于:https://www.cnblogs.com/duanxz/p/3621155.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的MongoDB优化之二:常见优化方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转] 移动平台Html5的viewpo
- 下一篇: 垃圾回收算法与垃圾回收器