如何定位MySQL中的慢查詢

      網友投稿 923 2025-04-01

      相信大家在平時工作中都有過 SQL 優化經歷,那么在優化前就必須找到慢 SQL 方可進行分析。這篇文章就介紹下如何定位到慢查詢。

      慢查詢日志是 MySQL 內置的一項功能,可以記錄執行超過指定時間的 SQL 語句。

      以下是慢查詢的相關參數,大家感興趣的可以看下:

      開啟慢查詢

      有兩種方式可以開啟慢查詢

      修改配置文件

      設置全局變量

      方式一需要修改配置文件 my.ini,在[mysqld]段落中加入如下參數:

      [mysqld]

      log_output='FILE,TABLE'

      slow_query_log='ON'

      long_query_time=0.001

      然后需要重啟 MySQL 才可以生效,命令為 service mysqld restart

      方式二無需重啟即可生效,但是重啟會導致設置失效,設置的命令如下所示:

      SET?GLOBAL?slow_query_log?=?'ON';

      SET?GLOBAL?log_output?=?'FILE,TABLE';

      SET?GLOBAL?long_query_time?=?0.001;

      這樣就可以將慢查詢日志同時記錄在文件以及 mysql.slow_log 表中。

      通過第二種方式開啟慢查詢日志,然后使用全表查詢語句 SELECT * FROM user

      然后再查詢慢查詢日志:SELECT * FROM mysql.slow_log,可以發現其中有這樣一條記錄:

      其中,start_time 為執行時間,user_host 為用戶的主機名,query_time 為查詢所花費的時間,lock_time 為該查詢使用鎖的時間,rows_sent 為這條查詢返回了多少數據給客戶端,rows_examined 表示這條語句掃描了多少行,db 為數據庫,sql_text 為這條 SQL,thread_id 為執行這條查詢的線程 id。

      這樣我們就可以通過 slow_log 表的數據進行分析,然后對 SQL 進行調優了。

      以上是通過 Table 來進行分析的,下面來通過文件的慢查詢是怎么樣的。

      如何定位MySQL中的慢查詢

      如果不知道文件保存在哪里,可以使用 SHOW VARIABLES LIKE '%slow_query_log_file%' 來查看文件保存位置,打開慢查詢日志文件,可以看出每五行表示一個慢 SQL,這樣查看比較費事,可以使用一些工具來查看。

      mysqldumpslow

      MySQL 內置了 mysqldumpslow 這個工具來幫助我們分析慢查詢日志文件,Windows 環境下使用該工具需要安裝 Perl 環境。

      可以通過 -help 來查看它的命令參數:

      比如我們可以通過 mysqldumpslow -s t 10 LAPTOP-8817LKVE-slow.log 命令得到按照查詢時間排序的 10 條 SQL 。

      pt-query-digest

      除此之外還有 pt-query-digest,這個是 Percona Toolkit 中的工具之一,-:https://www.percona.com/downloads/percona-toolkit/LATEST/,如果是 Windows 系統,可以在安裝 Perl 的環境下,把腳本下載下來:https://raw.githubusercontent.com/percona/percona-toolkit/3.x/bin/pt-query-digest

      下面先對 pt-query-digest 進行簡單的介紹:

      pt-query-digest 是用于分析 MySQL 慢查詢的一個第三方工具,可以分析 binlog、General log 和 slowlog,也可以通過 showprocesslist 或者通過 tcpdump 抓取的 MySQL 協議數據來進行分析,可以把分析結果輸出到文件中,分析過程是先對查詢語句的條件進行參數化,然后對參數化以后的查詢進行分組統計,統計出各查詢的執行時間、次數、占比等,可以借助分析結果找出問題進行優化。

      有興趣的可以先下載下來自己玩玩,將在后續的文章中對 pt-query-digest 工具進行詳細介紹。

      show processlist

      還有種情況是慢查詢還在執行中,慢查詢日志里是找不到慢 SQL 呢,這個時候可以用 show processlist 命令來尋找慢查詢,該命令可以顯示正在運行的線程,執行結果如下圖所示,可以根據 Time 的大小來判斷是否為慢查詢。

      總結

      這篇文章主要講解了如何定位慢查詢以及簡單介紹了 mysqldumpslow 和 pt-query-digest 工具,后續還會講解 explain 和 ?show profile 以及 trace 等常用的方法。

      你在定位慢查詢或者優化 SQL 時,都會用到哪些方法呢?

      感謝大家的閱讀,歡迎留言進行交流討論。

      最好的關系就是互相成就,大家的在看、轉發、留言三連就是我創作的最大動力。

      參考文檔

      https://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html

      MySQL SQL

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps2019表格單元格怎么設置邊框顏色?
      下一篇:SparkAPI Java版】JavaPairRDD——countByValue、countByValueApprox
      相關文章
      亚洲av中文无码乱人伦在线观看| 亚洲高清资源在线观看| 亚洲国产美国国产综合一区二区 | 色拍自拍亚洲综合图区| 亚洲日韩精品无码专区网站| 亚洲av无码专区在线观看亚| 亚洲成A人片在线播放器| 亚洲午夜电影在线观看| 久久久亚洲欧洲日产国码aⅴ| 亚洲人成电影网站国产精品| 欧洲亚洲国产精华液| 亚洲日本天堂在线| 国产成人精品日本亚洲直接| 亚洲黄色免费在线观看| 亚洲精品国产成人专区| 97亚洲熟妇自偷自拍另类图片| 国产精品亚洲A∨天堂不卡 | 亚洲一级黄色大片| 亚洲国产成a人v在线| 亚洲成人黄色在线观看| 亚洲欧洲日产国码在线观看| 亚洲神级电影国语版| 亚洲天堂电影在线观看| 亚洲午夜电影在线观看高清| 亚洲另类视频在线观看| 老色鬼久久亚洲AV综合| 亚洲AV日韩精品久久久久久久| 亚洲精品无码mv在线观看网站| 亚洲午夜国产精品无码| 亚洲永久精品ww47| 国产gv天堂亚洲国产gv刚刚碰 | 亚洲AV福利天堂一区二区三| 亚洲AV永久青草无码精品| 亚洲av无码不卡| 亚洲午夜在线电影| 亚洲一卡二卡三卡| 亚洲综合一区二区三区四区五区| 亚洲一区二区久久| 亚洲av色香蕉一区二区三区| 亚洲精品无码av天堂| 亚洲精品国产精品乱码不卡√|