MySQL資料庫慢的思路解決
資料庫應用,常見兩種型別:CPU密集型和I/O密集型。因此,我們在排查資料庫問題時,通常是從這兩方面入手的。
CPU密集型的資料庫,效能問題有以下幾種:
1.複雜的查詢語句、儲存過程、觸發器、自定義函式等;
2.鎖競爭問題;
3.併發量大。
解決問題的思路:
1.透過慢查詢日誌,找出相關語句,最佳化查詢語句調整索引策略。還可以將複雜儲存過程、觸發器、自定義函式交由應用程式碼實現;
2.根據infomation_schema中的innodb_trx、innodb_locks、innodb_lock_watis三種表,找出鎖的事務與開發協調。如果場景允許,可以考慮把事務隔離級別降到讀提交。
3.做讀寫分離、水平拆分。或者增加快取層,讓高併發的讀寫壓力由快取層消化;
4.調整mysql跟cpu相關引數,這裡不一一羅列。
I/O密集型的資料庫,效能問題有以下幾種:
1.投影了所有欄位、全表掃描、表結構設計、索引設計問題等;
2.記憶體緩衝區設定過小,造成了過多的磁碟I/O;
3.網路頻寬較小(常見於分散式系統中)。
解決問題的思路:
1.透過慢查詢日誌,找出執行時間久,而且結果集大的語句。減少投影的欄位,只選擇必要的欄位做投影,最佳化表結構與索引設計;
2.調整記憶體緩衝區、日誌重新整理、重新整理方法等等引數的設定,這裡不一一羅列;
3.提升網路頻寬,調整核心引數。
如果上述措施還不能解決問題或者效果不明顯,可以考慮擴容。擴容分為:縱向擴充套件和橫向擴充套件。
縱向擴充套件:一般用於解決響應時間長的問題。增加CPU計算能力可以減少響應時間,增加記憶體可以減少磁碟I/O,並將磁碟做raid5、10、01或者直接使用SSD提升I/O處理能力;
橫向擴充套件:一般用於解決高併發量問題。比如做簡單的讀寫分離、使用mycat將資料量做分片等,儘量將單機壓力分擔出去。
這裡提到了解決高併發量的問題,其實還可以用非同步的方式,將壓力前移到快取層,降低寫入壓力;同時,快取一些熱點資料,也能大大減輕讀壓力。
CPU密集型的資料庫,效能問題有以下幾種:
1.複雜的查詢語句、儲存過程、觸發器、自定義函式等;
2.鎖競爭問題;
3.併發量大。
解決問題的思路:
1.透過慢查詢日誌,找出相關語句,最佳化查詢語句調整索引策略。還可以將複雜儲存過程、觸發器、自定義函式交由應用程式碼實現;
2.根據infomation_schema中的innodb_trx、innodb_locks、innodb_lock_watis三種表,找出鎖的事務與開發協調。如果場景允許,可以考慮把事務隔離級別降到讀提交。
3.做讀寫分離、水平拆分。或者增加快取層,讓高併發的讀寫壓力由快取層消化;
4.調整mysql跟cpu相關引數,這裡不一一羅列。
I/O密集型的資料庫,效能問題有以下幾種:
1.投影了所有欄位、全表掃描、表結構設計、索引設計問題等;
2.記憶體緩衝區設定過小,造成了過多的磁碟I/O;
3.網路頻寬較小(常見於分散式系統中)。
解決問題的思路:
1.透過慢查詢日誌,找出執行時間久,而且結果集大的語句。減少投影的欄位,只選擇必要的欄位做投影,最佳化表結構與索引設計;
2.調整記憶體緩衝區、日誌重新整理、重新整理方法等等引數的設定,這裡不一一羅列;
3.提升網路頻寬,調整核心引數。
如果上述措施還不能解決問題或者效果不明顯,可以考慮擴容。擴容分為:縱向擴充套件和橫向擴充套件。
縱向擴充套件:一般用於解決響應時間長的問題。增加CPU計算能力可以減少響應時間,增加記憶體可以減少磁碟I/O,並將磁碟做raid5、10、01或者直接使用SSD提升I/O處理能力;
橫向擴充套件:一般用於解決高併發量問題。比如做簡單的讀寫分離、使用mycat將資料量做分片等,儘量將單機壓力分擔出去。
這裡提到了解決高併發量的問題,其實還可以用非同步的方式,將壓力前移到快取層,降低寫入壓力;同時,快取一些熱點資料,也能大大減輕讀壓力。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2138097/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫正常執行,突然變慢的解決思路資料庫
- 解決資料庫慢的方法論資料庫
- 資料庫層面問題解決思路資料庫
- 提高MySQL 資料庫效能的思路(轉)MySql資料庫
- oracle 資料庫解決問題思路總結Oracle資料庫
- MySQL資料庫伺服器逐漸變慢 該如何分析與解決MySql資料庫伺服器
- 談談SQL慢查詢的解決思路SQL
- 解決Mysql資料庫插入資料出現問號(?)的解決辦法MySql資料庫
- MyGeneration連線MySQL資料庫解決MySql資料庫
- 資料庫異常緩慢的解決 - FAST_START_PARALLEL_ROLLBACK資料庫ASTParallel
- DNS導致資料庫登入緩慢的問題解決DNS資料庫
- MongoDB從庫延遲讀取資料問題的解決思路MongoDB
- MyGeneration連線MySql資料庫解決(轉)MySql資料庫
- 【資料庫】解決Mysql資料庫提示innodb表不存在的問題!資料庫MySql
- 資料庫異常緩慢的解決 - FAST_START_PARALLEL_ROLLBACK[轉帖]資料庫ASTParallel
- 分享:MySQL資料庫崩潰解決過程MySql資料庫
- 資料庫——慢sql的原因資料庫SQL
- MYSQL速度慢的問題 記錄資料庫語句MySql資料庫
- mysql之神奇的死鎖及解決思路MySql
- 使用 localhost 無法連線 MySQL 資料庫的解決方案localhostMySql資料庫
- MYSQL資料庫表記錄刪除解決方案MySql資料庫
- 安裝mysql資料庫及問題解決方法MySql資料庫
- MySQL資料庫常見錯誤及解決方案MySql資料庫
- 資料庫查詢慢的原因資料庫
- MYSQL資料庫匯入資料時出現亂碼的解決辦法MySql資料庫
- mysql慢查詢,死鎖解決方案MySql
- 插入大量資料速度慢的解決方法:批量插入
- Mysql資料庫優化系列(一)------Mysql伺服器優化思路MySql資料庫優化伺服器
- TDengine3.0:解決高基數問題的時序資料庫設計思路資料庫
- MySQL資料庫-鎖詳解MySql資料庫
- MYSQL++ 資料庫連線超時的解決辦法LTMySql資料庫
- MySQL資料庫錯誤server_errno=2013的解決MySql資料庫Server
- MySQL 資料高可用的實現思路MySql
- 解決MySQL的主從資料庫沒有同步的兩種方法MySql資料庫
- [資料庫] Navicat for MySQL換種思維解決插入同時更新資料資料庫MySql
- mysql8.0插入慢的問題解決方案(一)MySql
- 資料庫連線非常慢資料庫
- 資料庫連線緩慢資料庫