MySQL 快速定位效能問題
阿新 • • 發佈:2018-12-27
一、效能檢視幾款小工具:
Top
檢視:觀察 load average :1分鐘,5分鐘,15分鐘的平均負載值
1. us% 使用者使用的 CPU 佔比,如果 us% 太高, 極有可能索引使用不當。
2. sy% 系統核心使用的CPU佔比,如果sy% 太高,要注意MySQL 連線數以及MySQL 的鎖資訊。
3. wa% io 使用 CPU 的佔比,如果wa% 太高,要關注MySQL是否使用了硬碟臨時表,或者大量的刷盤等操作,
也有可能是硬碟太慢,或硬碟故障,可以使用iostat 等工具進行觀察。
Mpstat
各個邏輯CPU 之間的負載是否均衡,(可能是中斷不均衡導致效能問題),可以使用 mpstat 命令來進行詳細觀察。
Vmstat
通過vmstat 來觀察每秒的程序、記憶體、swap、io、cpu 等詳情情況。
Iostat -x
關注IO 使用情況 iostat -x
1.rrqm/s #每秒讀取的扇區數。
2.wrqm/s #每秒寫入的扇區數。
3.avgrq-sz #平均請求扇區的大小
4.qvgqu-sz #是平均請求佇列的長度。
5.await #每一個IO 請求的相應時間。
6.%util #在統計時間內所有處理IO 時間,除以總共統計時,暗示了裝置的繁忙程度。
二、MySQL 檢視
1. tps,qps,併發連線數(thread_connected)、併發活躍執行緒數(thread_running)、臨時表(tmp_disk_tables)、鎖(locks_waited,Innodb_row_lock*)等指標。
2.通過 show processlist ,檢視當前是否有不良執行緒狀態,例如:copy to tmp table 、creating sort index、sorting result,creating tmp table、長時間的 sending data等。
3.關注InnoDB buffer pool page 的使用情況,主要是InnoDB pages_free、InnoDB wait_free 兩個。
4.關注 InnoDB 的 redo_log 重新整理延遲,尤其是 checkpoint 延遲情況,並關注 unpurge list 大小。
5.關注 innodb status 中是否有 long semaphore wait 情況的出現。
6.觀察是否有大事務的阻塞。
參考: 田帥萌 3306 π
https://github.com/enmotplinux/old_mysql_20181224/blob/master/mysql_inspection.py
https://github.com/enmotplinux/old_mysql_20181224/blob/master/sos.sh