mysql 慢SQL分析

  • 開啟慢SQL記錄

  1. 為什么要開啟慢SQL記錄
    mysql在運行過程中,某些SQL可能會執(zhí)行較長時間,我們通過配置一些東西,把這些SQL記錄下來,以便我們分析和優(yōu)化SQL。
  2. 首先先查看是否已經開啟了記錄設置
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 閾值時間,當執(zhí)行時間超過這個值的SQL會被記錄下來
slow_query_log_file 記錄的位置

  1. 使用命令行設置
    set global slow_query_log = ON;
    set long_query_time = 1;
    set slow_query_log_file = '/var/log/mysql_slow.log';
    通過這種方式設置,當mysql重新啟動后設置會丟失,需要重新設置

  2. 通過修改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表)

  1. 需要注意的地方
    必須保證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開始執(zhí)行的時間
第二行:SQL執(zhí)行的用戶
第三行:Query_time(SQL查詢時間), Lock_time(鎖時間),Rows_sent(返回的行數), Rows_examined(查詢的行數)
第四行:SQL開始執(zhí)行的時間對應的時間戳
第五行:SQL詳情

  • 記錄分析(mysqldumpslow)

mysqldumpslow -s t -t 10 -g 'log' mysql_slow.log
MySQL自帶的慢SQL分析工具
-s : 按照哪種規(guī)則排序

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。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 慢查詢日志概念 MySQL的慢查詢日志是MySQL提供的一種日志記錄,它用來記錄在MySQL中響應時間超過閥值的語...
    think_lonely閱讀 897評論 0 1
  • MYSQL 基礎知識 1 MySQL數據庫概要 2 簡單MySQL環(huán)境 3 數據的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 8,057評論 5 115
  • 如何在MySQL中查找效率慢的SQL語句呢?這可能是困擾很多人的一個問題,MySQL通過慢查詢日志定位那些執(zhí)行效率...
    點融黑幫閱讀 37,200評論 3 37
  • ——開往秋天的列車—— 閏六月十七日午后,大雨。 芒鞋單車穿林騎, 傍晚雨稍歇,歸,燈下寄筆。 鵝管水晶尖 落葉知...
    摩羯星一號閱讀 496評論 3 3
  • 人格的結構包括哪些? (1)知—情—意系統(tǒng)。 (2)心理狀態(tài)系統(tǒng)。 (3)人格動力系統(tǒng)。 (4)心理特征系統(tǒng)。 (...
    糖抖森閱讀 179評論 1 0

友情鏈接更多精彩內容