實際工作中經常會遇到資料庫操作突然變慢的情況,但是檢查了各種硬體設施以及網路監控後發現都沒有什麼問題;這時候就要從資料庫入手了,而慢sql是我們工作中經常會遇到的影響查詢效能的情況。本文將介紹如何在mysql中獲取慢sql。
一、資料庫中通過日誌記錄慢sql的幾個配置項
1.slow_query_log 該配置用於配置是否捕獲執行時間超過一定數值的sql語句,預設值為off
查詢資料的配置方式為
show variables like 'slow_query_log';
開啟該配置的方式有兩種
#第一種為執行設定命令
set global slow_query_log='on';
#第二種為修改 my.cnf 中的配置
slow_query_log = 1 #開啟慢查詢
2.long_query_time 當sql執行時間超過該配置設定值後將被記錄,該值單位為秒設定時支援設定為小數,預設值為10秒
查詢資料的配置方式為
show variables like 'long_query_time';
開啟該配置的方式同樣也是有兩種
#第一種為執行設定命令
set global long_query_time=5;
#第二種為修改 my.cnf 中的配置
long_query_time = 1 #超過的時間為1s
3.slow_query_log_file 超時時間記錄的檔案路徑
查詢配置的方式為
show variables like 'slow_query_log_file';
開啟配置的方式為
#第一種為執行設定命令
set global slow_query_log_file='/var/***.log';
#第二種為修改 my.cnf 中的配置
log-slow-queries=/var/***.log
4.log_queries_not_using_indexes 當設定為 on 時,可以捕捉到所有未使用索引的sql語句,預設值為off
查詢資料的配置方式為
show variables like 'log_queries_not_using_indexes';
開啟配置的方式為
#第一種為執行設定命令
set global log_queries_not_using_indexes ='on';
#第二種為修改 my.cnf 中的配置
log-queries-not-using-indexes = 1 #開啟慢查詢
二、日誌內容分析
當開啟了慢sql日誌後,可以在配置好的日誌輸出位置看到慢sql的記錄,檢視內容的方式有兩種
1.直接檢視日誌內容,我們可以通過直接開啟檔案的方式檢視日誌內容;但是使用此種方式就需要我們自行對日誌記錄的內容進行分析。日誌記錄結果如下:
# time: 201110 23:40:02
# user@host: data_base[datausername_rw] @ [ip] id: 55520890
# query_time: 0.530398 lock_time: 0.000042 rows_sent: 1 rows_examined: 2021690
set timestamp=1605022802;
select count(1) from table_name where 1 = 1;
2.使用mysql自帶的 mysqldumpslow 命令
#常用引數說明
-s 後面接下面的引數表示 mysqldumpslow 結果顯示的順序!
c query執行的次數
t sql執行的時間
l lock鎖表的時間
r sql返回的行數
#ac,at,al,ar,表示倒序排列
-t,是top n,即為返回前面n條資料
-g,後邊可以寫乙個正則匹配模式,大小寫不敏感
#語句示例
mysqldumpslow -s t -t 2 /opt/mysql/data/slowquery.log #顯示執行時間最長的前兩個sql
mysqldumpslow -s c -t 2 /opt/mysql/data/slowquery.log #顯示次數最多的前兩個sql
三、使用 show processlist 命令實時查詢執行語句
1.show processlist命令可以將當前正在正在執行的執行緒進行列印,字段說明如下
2.state 列介紹,state只是語句執行過程中的某乙個狀態;比如執行查詢時,可能需要經過copying to tmp table,sorting result,sending data等狀態才可以完成。狀態的值主要有以下幾種:
Mysql慢查詢語句分析
1.show full processlist 解釋 id 連線id,可以使用kill 連線id的方式關閉連線 user 當前使用者 host 當前連線客戶端 db 連線的資料庫 command 顯示當前連線的當前執行的狀態,sleep query connect time 持續時間 state s...
查詢MySQL中查詢慢的SQL語句的方法
1 通過查詢日誌 1 windows下開啟mysql慢查詢 mysql在windows系統中的配置檔案一般是是my.ini找到 mysqld 下面加上 如下 log slow queries f mysql log mysqlslowquery。log long query time 2 2 lin...
mysql 慢查詢 MySQL慢查詢
一 簡介 開啟慢查詢日誌,可以讓mysql記錄下查詢超過指定時間的語句,通過定位分析效能的瓶頸,才能更好的優化資料庫系統的效能。二 引數說明 slow query log 慢查詢開啟狀態 slow query log file 慢查詢日誌存放的位置 這個目錄需要mysql的執行帳號的可寫許可權,一般...