10 效能優化 監控 MySQL慢查詢

2021-08-27 20:03:33 字數 1793 閱讀 9955

1.記錄慢查詢配置

show variables where variable_name like 'slow%' ; --檢視預設日誌路徑

查詢結果:--不用的機器可能不同

slow_query_log_file=/var/lib/mysql/centos-slow.log

修改mysqld配置檔案:/usr /my.cnf[一般在/etc/my.cnf,本機在/user/my.cnf],新增以下幾項:

[mysqld]

slow_query_log=on

long_query_time=0.2

long_query_time較低(5.0及之前)的mysql版本不支援小數

set global slow_query_log=on; --如果通過這個指令碼設定的話,重啟mysql後就失效了

log-queries-not-using-indexes --表示記錄沒有使用索引的語句到慢查詢日誌

配置好上述引數後,重啟mysqld服務,開始對效能差的查詢sql進行監測。

2.分析慢查詢日誌

執行一段時間後,慢查詢日誌會記錄到上面路徑的日誌檔案中,因為日誌記錄很多,不可能一條一條記錄的去分析,可以通過mysql自帶的msyqldumpslow進行分析。

1) # 找出平均執行時間最長的10條sql

mysqldumpslow -t 10 -s at /var/lib/mysql/centos-slow.log > /var/lib/mysql/centos-slow-at.log

2) # 找出總執行時間最長的10條sql

mysqldumpslow -t 10 -s t /var/lib/mysql/centos-slow.log > /var/lib/mysql/centos-slow-t.log

3) # 找出執行次數最多的10條sql

mysqldumpslow -t 10 -s c /var/lib/mysql/centos-slow.log > /var/lib/mysql/centos-slow-c.log

4) # 找出返回記錄數最多的10條sql

mysqldumpslow -t 10 -s r /var/lib/mysql/centos-slow.log > /var/lib/mysql/centos-slow-r.log

3.記錄所有sql

[mysqld]

general_log=on

show variables like '%log%';

查詢結果:--記錄所有sql的日誌檔案

general_log_file=/var/lib/mysql/centos.log

或者將long_query_time的值設定為0記錄所有的sql

4.p6spy

效能優化,通常需要將同一事務中所有執行的sql進行分析和優化,這就要獲取這一事務執行過程中執行的所有sql語句。一般應用的架構均有控制是否顯示所有操作sql的引數,如果沒有的話,可以通過p6spy記錄。

1)將p6spy.jar包拷貝到web-inf/lib目錄下

2)將spy.properties拷貝到web-inf/classes目錄下

3)將應用的驅動修改為com.p6spy.engine.spy.p6spydriver

4)將spy.properties中的realdriver設定為真實的驅動,com.mysql.jdbc.driver

5)執行應用,可以看到tomcat的bin目錄下有個spy.log檔案,這個檔案記錄了所有操作的sql語句。僅需關注statement型別的即可,resultset和result型別的語句不需關心。

5.參考資料

效能優化 MySQL慢查日誌的儲存格式

如下圖所示 說明 1 time 180526 1 06 54 查詢的執行時間 2 user host root root localhost id 4 執行sql的主機資訊 3 query time 0.000401 lock time 0.000105 rows sent 2 rows exami...

mysql效能監控軟體 慢日誌分析利器

入題之前先講講為什麼寫這篇文章,這就不得不提起mysql與percona,阿里基於mysql開發了alisql,寫這篇文章的時候阿里已經將其開源,percona是一家領先的mysql諮詢公司,該公司基於mysql開發了percona server,percona server是一款獨立的資料庫產品,...

MySQL高階效能優化 慢日誌查詢

mysql的慢查詢日誌時mysql提供的一種日誌記錄,它用來記錄在mysql中響應時間超過閥值的語句。具體指執行時間超過long query time值的sql,則會被記錄到慢查詢日誌中。long query time的預設值為10,意思是執行10s以上的語句。就會被認作是慢查詢。預設情況下,mys...