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資料庫
- 【資料庫】解決Mysql資料庫提示innodb表不存在的問題!資料庫MySql
- PbootCMS資料庫配置,修改為Mysql資料庫,配置Mysql出錯解決辦法boot資料庫MySql
- 資料庫——慢sql的原因資料庫SQL
- MYSQL速度慢的問題 記錄資料庫語句MySql資料庫
- MYSQL資料庫表記錄刪除解決方案MySql資料庫
- 安裝mysql資料庫及問題解決方法MySql資料庫
- MYSQL資料庫匯入資料時出現亂碼的解決辦法MySql資料庫
- 資料庫查詢慢的原因資料庫
- mysql慢查詢,死鎖解決方案MySql
- MYSQL++ 資料庫連線超時的解決辦法LTMySql資料庫
- MySQL資料庫-鎖詳解MySql資料庫
- 解決MySQL的主從資料庫沒有同步的兩種方法MySql資料庫
- TDengine3.0:解決高基數問題的時序資料庫設計思路資料庫
- mysql8.0插入慢的問題解決方案(一)MySql
- 資料庫系列:MySQL慢查詢分析和效能最佳化資料庫MySql
- MySQL資料庫基礎詳解MySql資料庫
- 資料庫篇:mysql鎖詳解資料庫MySql
- MySQL 資料庫 ALTER命令講解MySql資料庫
- MySQL資料庫的索引原理、與慢SQL優化的5大原則MySql資料庫索引優化
- 一個不可思議的MySQL慢查分析與解決MySql
- 2020版千鋒MySQL資料庫零基礎到精通教程,解決資料庫苦惱!MySql資料庫
- 解決hive資料庫 插入資料很慢的問題Hive資料庫
- MybatisPlus多資料來源及事務解決思路MyBatis
- mysql資料庫的安裝(圖文詳解)MySql資料庫
- MySQL主從資料庫同步延遲問題怎麼解決MySql資料庫
- MySQL資料庫詳解(三)MySQL的事務隔離剖析MySql資料庫
- (7) MySQL資料庫備份詳解MySql資料庫
- mysql資料庫的索引MySql資料庫索引
- [資料庫]【MySQL】MySQL資料庫規範總結資料庫MySql
- 雲資料庫安全解決方案資料庫
- 資料庫回檔解決方案資料庫
- 資料庫MySQL一般查詢日誌或者慢查詢日誌歷史資料的清理資料庫MySql
- 資料庫(MySQL)資料庫MySql
- MYSQL資料庫MySql資料庫
- 資料庫-MySQL資料庫MySql
- 資料庫 MySQL資料庫MySql
- 小白也能懂的Mysql資料庫索引詳解MySql資料庫索引