MySQL資料庫慢的排查思路

2021-09-25 03:38:38 字數 1112 閱讀 6327

資料庫慢,如何排查?相信這個問題是所有dba在工作中常遇到的乙個問題。以下是總結的一些思路。

資料庫應用,常見兩種型別: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將資料量做分片等,盡量將單機壓力分擔出去。

這裡提到了解決高併發量的問題,其實還可以用非同步的方式,將壓力前移到快取層,降低寫入壓力;同時,快取一些熱點資料,也能大大減輕讀壓力。

MySQL資料庫掛掉排查 MySQL資料庫死鎖排查

第一種 1.查詢是否鎖表 show open tables where in use 0 2.查詢程序 如果您有super許可權,您可以看到所有執行緒。否則,您只能看到您自己的執行緒 show processlist 3.殺死程序id 就是上面命令的id列 kill id 第二種 1.檢視下在鎖的事...

Oracle資料庫連線問題排查思路

本文分享了自己在使用oracle資料庫時,遇到連線問題的排查方法。最基本的,要想連線,資料庫本身得是正常執行著的。linux需要先執行,windows直接開啟cmd su oracle。以dba角色登入本地資料庫。連這個都連不上,說明資料庫沒啟動好。要排查資料庫本身的問題。sqlplus as sy...

MySql資料庫慢查詢

一 什麼是資料庫慢查詢?資料庫慢查詢,就是查詢時間超過了我們設定的時間的語句。預設的設定時間是10秒。也可以自己根據實際專案設定。set long query time 0.0001 slow query log 是否開啟慢查詢日誌,1表示開啟,0表示關閉。log slow queries 舊版 5...