影響MongoDB資料庫效能的幾個重要因素
1.鎖
MongoDB用一個鎖確保資料的一致性。但如果某種操作長時間執行,其他請求和操作不得不等待這個鎖,導致系統效能降低。
為了驗證是否由於鎖降低了效能,我們可以檢查serverStatus輸出的globalLock部分資料。如果引數lobalLock.currentQueue.total
的值一直比較大,說明系統中有許多請求在等待鎖,同時表明併發問題影響了系統的效能。
如果globalLock.totalTime的值與uptime的值接近,說明資料庫在鎖狀態佔用了系統大量時間。如果globalLock.ratio的值
也高,說明資料庫處理了大量的長查詢,引起長查詢的因素主要有:
2.記憶體
MongoDB透過記憶體對映資料檔案,如果資料集很大,MongoDB將佔用所有可用的系統記憶體。正是由於記憶體對映機制將記憶體的管理交給操作
系統來完成,簡化了MongoDB的記憶體管理,提高了資料庫系統的效能,但是由於不能確定資料集的大小,需要多少記憶體也是個未知之數。
透過serverStatus()輸出的關於記憶體使用的狀態方面的資料,我們能夠深入的瞭解記憶體使用情況。
3.缺頁錯誤
當MongoDB請求的資料不在實體記憶體中,必須從虛擬記憶體中讀取時,就會引起缺頁錯誤。為了檢查缺頁錯誤,我們可以檢查serverStatus()
輸出項中extra_info.page_faults的值。單次的缺頁錯誤對系統來說並不是問題,它表明MongoDB要讀取的資料很多都不在記憶體中,需要從
磁碟中讀取。增加系統記憶體量可以降低缺頁錯誤的次數,但是單臺機器的實體記憶體畢竟是有限的,而我們的資料檔案通常都比記憶體要大,為了
解決這個問題,我們可以部署分片叢集。
4.連線數
有時候客戶端的連線數超過了MongoDB資料庫伺服器處理請求的能力,這也會降低系統的效能,我們可以透過serverStatus()輸出的關於連線數
方面的引數進行進一步分析。引數globalLock,activeClients表示當前正在進行讀寫操作客戶端連線數,current表示當前客戶端到資料庫例項
的連線數,available表示可用連線數。對於讀操作大的應用程式,我們可以增加複製整合員數,將讀操作分發到secondary節點上,對於寫操作
大的應用程式,我們可以透過部署分片叢集來分發寫操作。
MongoDB用一個鎖確保資料的一致性。但如果某種操作長時間執行,其他請求和操作不得不等待這個鎖,導致系統效能降低。
為了驗證是否由於鎖降低了效能,我們可以檢查serverStatus輸出的globalLock部分資料。如果引數lobalLock.currentQueue.total
的值一直比較大,說明系統中有許多請求在等待鎖,同時表明併發問題影響了系統的效能。
如果globalLock.totalTime的值與uptime的值接近,說明資料庫在鎖狀態佔用了系統大量時間。如果globalLock.ratio的值
也高,說明資料庫處理了大量的長查詢,引起長查詢的因素主要有:
- 1).索引使用不恰當甚至低效
- 2).資料庫的設計沒有最佳化
- 3).查詢語句本身結構效能低下
- 4).系統架構有問題
2.記憶體
MongoDB透過記憶體對映資料檔案,如果資料集很大,MongoDB將佔用所有可用的系統記憶體。正是由於記憶體對映機制將記憶體的管理交給操作
系統來完成,簡化了MongoDB的記憶體管理,提高了資料庫系統的效能,但是由於不能確定資料集的大小,需要多少記憶體也是個未知之數。
透過serverStatus()輸出的關於記憶體使用的狀態方面的資料,我們能夠深入的瞭解記憶體使用情況。
- 1).檢查引數mem.resident的值,如果超過了系統記憶體量並且還有大量的資料檔案在磁碟上,表明系統記憶體過小;
- 2).檢查引數mem.mapped的值,如果這個值大於系統記憶體量,那麼針對資料庫的一些讀操作將會引起作業系統的缺頁錯誤,記憶體的換入換出將會降低系統的效能。
3.缺頁錯誤
當MongoDB請求的資料不在實體記憶體中,必須從虛擬記憶體中讀取時,就會引起缺頁錯誤。為了檢查缺頁錯誤,我們可以檢查serverStatus()
輸出項中extra_info.page_faults的值。單次的缺頁錯誤對系統來說並不是問題,它表明MongoDB要讀取的資料很多都不在記憶體中,需要從
磁碟中讀取。增加系統記憶體量可以降低缺頁錯誤的次數,但是單臺機器的實體記憶體畢竟是有限的,而我們的資料檔案通常都比記憶體要大,為了
解決這個問題,我們可以部署分片叢集。
4.連線數
有時候客戶端的連線數超過了MongoDB資料庫伺服器處理請求的能力,這也會降低系統的效能,我們可以透過serverStatus()輸出的關於連線數
方面的引數進行進一步分析。引數globalLock,activeClients表示當前正在進行讀寫操作客戶端連線數,current表示當前客戶端到資料庫例項
的連線數,available表示可用連線數。對於讀操作大的應用程式,我們可以增加複製整合員數,將讀操作分發到secondary節點上,對於寫操作
大的應用程式,我們可以透過部署分片叢集來分發寫操作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2118236/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 影響資料庫效能與穩定性的幾個重要引數資料庫
- 影響資料檢索效率的幾個因素
- 磁碟排序對Oracle資料庫效能的影響排序Oracle資料庫
- MySQL影響伺服器效能的幾個方面MySql伺服器
- 磁碟排序對Oracle資料庫效能的影響PT排序Oracle資料庫
- 容器化對資料庫的效能有影響嗎?資料庫
- MySQL資料庫的效能的影響分析及其優化MySql資料庫優化
- MongoDB資料庫效能分析MongoDB資料庫
- 關於資料庫開啟大頁對效能的影響資料庫
- 哪些方面會影響伺服器資料庫效能伺服器資料庫
- ORM框架和資料庫對系統效能影響的比較ORM框架資料庫
- 影響網路速度的重要因素有哪些
- 影響mysqld安全的幾個選項(轉)MySql
- 【知識分享】哪些方面會影響伺服器資料庫效能伺服器資料庫
- 速看:大資料能在這幾個行業產生積極的影響!大資料行業
- Mongodb 刪除重複資料的幾個方法MongoDB
- 資料庫調優和資料遷移是如何影響資料庫的RY資料庫
- Backup And Recovery User's Guide-使用閃回資料庫-監控閃回資料庫對效能的影響GUIIDE資料庫
- 影響移動網站排名的重要因素都有哪些呢?網站
- eMarketer:影響品牌營銷網路化成功的重要因素
- 變更OS時間對資料庫的影響資料庫
- 執行緒數目對資料庫的影響執行緒資料庫
- Oracle 資料庫伺服器的幾個效能測試指標Oracle資料庫伺服器指標
- 業務資料抓取的影響
- 影響你網站效能的 5 個瓶頸網站
- 15個全球最有影響力的大資料公司大資料
- 資料庫的統計(select)確實會影響資料庫的更新(update)的資料庫
- 聊聊虛擬化和容器對資料庫的影響資料庫
- 修改系統時間對oracle資料庫的影響Oracle資料庫
- 載入資料順序對HASH SORT CLUSTER效能影響
- 軟體效能的設計(三)資料型別對軟體效能的影響 (轉)資料型別
- WordPress外掛漏洞影響100萬個站點,或可永久刪除幾乎所有資料庫內容資料庫
- [zt] 影響SQL效能的原因SQL
- 資料庫遷移的幾個方式資料庫
- 三個影響SQL Server效能關鍵點SQLServer
- 影響Oracle標量子查詢效能的三個因素Oracle
- 業務響應時間和資料庫效能資料庫
- MongoDB資料庫MongoDB資料庫