mysql常見慢sql mysql 慢SQL分析

2021-10-19 16:24:25 字數 2961 閱讀 2904

開啟慢sql記錄

為什麼要開啟慢sql記錄

mysql在執行過程中,某些sql可能會執行較長時間,我們通過配置一些東西,把這些sql記錄下來,以便我們分析和優化sql。

首先先檢視是否已經開啟了記錄設定

mysql> show variables like '%query%';

| variable_name | value |

| long_query_time | 1.000000 |

| slow_query_log | on |

| slow_query_log_file | /var/log/mysql_slow.log |

slow_query_log on為已開啟記錄慢sql,off表示關閉

long_query_time 閾值時間,當執行時間超過這個值的sql會被記錄下來

slow_query_log_file 記錄的位置

使用命令列設定

set global slow_query_log = on;

set long_query_time = 1;

set slow_query_log_file = '/var/log/mysql_slow.log';

通過這種方式設定,當mysql重新啟動後設定會丟失,需要重新設定

通過修改my.conf設定

slow_query_log = on

long_query_time = 1

slow_query_log_file = /var/log/mysql_slow.log

log_output=file,table

在mysql的配置檔案-my.cnf 的[mysqld]後面新增以上引數即可。log_output表示記錄的方式,file表示檔案,table表示資料庫(mysql.slow_log表)

需要注意的地方

必須保證slow_query_log_file檔案存在,且mysql有讀寫許可權才行。筆者在實驗的時候就是因為沒有許可權,導致每次設定都不成功。

記錄格式

# time: 2018-07-07t09:00:28.454918z

# user@host: huangzp[huangzp] @ [119.145.99.50] id: 12

# query_time: 45.012748 lock_time: 0.000220 rows_sent: 254 rows_examined: 1356773

set timestamp=1530954028;

select userid from chatting_log_201702 where aptype = 2 and userid = 'anywillfour';

第一行:sql開始執行的時間

第二行:sql執行的使用者

第三行:query_time(sql查詢時間), lock_time(鎖時間),rows_sent(返回的行數), rows_examined(查詢的行數)

第四行:sql開始執行的時間對應的時間戳

第五行:sql詳情

記錄分析(mysqldumpslow)

mysqldumpslow -s t -t 10 -g 'log' mysql_slow.log

mysql自帶的慢sql分析工具

-s : 按照哪種規則排序

c: 訪問計數

l: 鎖定時間

r: 返回記錄

t: 查詢時間

al:平均鎖定時間

ar:平均返回記錄數

at:平均查詢時間

-t : 顯示前幾個記錄

-g : 有點像grep, 後跟正則

[root@vm_centos log]# mysqldumpslow -s t -t 10 mysql_slow.log

reading mysql slow query log from mysql_slow.log

count: 1 time=157.27s (157s) lock=0.00s (0s) rows=1153145.0 (1153145), huangzp[huangzp]@[127.0.0.1]

select userid from chatting_log_201702 where aptype = n

count: 2 time=69.46s (138s) lock=0.00s (0s) rows=1.0 (2), huangzp[huangzp]@[127.0.0.1]

select count(*) from chatting_log_201702 where aptype = n and userid = 's'

count: 1 time=45.01s (45s) lock=0.00s (0s) rows=254.0 (254), huangzp[huangzp]@[127.0.0.1]

select userid from chatting_log_201702 where aptype = n and userid = 's'

count: 1 time=42.18s (42s) lock=0.00s (0s) rows=49906.0 (49906), huangzp[huangzp]@[127.0.0.1]

select * from chatting_log_201702 where roomid = 's'

count: 1 time=38.38s (38s) lock=0.00s (0s) rows=10732.0 (10732), huangzp[huangzp]@[127.0.0.1]

select userid from chatting_log_201702 where aptype = n and roomid = 's'

count: 1 time=8.02s (8s) lock=0.00s (0s) rows=1.0 (1), huangzp[huangzp]@[127.0.0.1]

select count(*) from chatting_log_201702 where userid = 's'

以上就是顯示按照查詢時間排序前十的sql。

mysql 慢查詢 MySQL慢查詢

一 簡介 開啟慢查詢日誌,可以讓mysql記錄下查詢超過指定時間的語句,通過定位分析效能的瓶頸,才能更好的優化資料庫系統的效能。二 引數說明 slow query log 慢查詢開啟狀態 slow query log file 慢查詢日誌存放的位置 這個目錄需要mysql的執行帳號的可寫許可權,一般...

MySQL常見問題之SQL查詢慢

可能是經常處理業務,最近總是聽到開發的同學說sql的查詢慢。然後問我為什麼,讓我在資料庫層面找原因。這樣的需求接的多了,對於這類需求,我已經有了一套比較官方的回答思路,我來說,大家看,看看還有什麼沒有考慮到的地方,歡迎指正。首先,當有業務方對我說sql查詢慢的時候,一般我會先問幾個問題 1 這個sq...

MySQL優化常見Extra分析 慢查詢優化

資料準備 create table user id int primary key,name varchar 20 varchar 5 index name engine innodb 資料說明 使用者表 id主鍵索引,name普通索引 非唯一 無索引 四行記錄 其中name普通索引存在重覆記錄li...