<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在日常的業務開發中
MySQL 出現慢查詢是很常見的
大部分情況下會分為兩種情況:
所以
對慢查詢 SQL 進行分析和優化很重要
其中 mysqldumpslow 是 MySQL 服務自帶的一款很好的分析調優工具
1、什麼是MySQL 慢查詢紀錄檔
MySQL提供的一種慢查詢紀錄檔記錄,用來記錄在MySQL查詢中響應時間超過閥值的記錄 具體指執行時間超過long_query_time值的SQL,則會被記錄到慢查詢紀錄檔中
2、如何檢視慢查詢設定情況
慢查詢的時間閾值設定
show variables like '%slow_query_log%';
解釋:
3、如何開啟慢查詢紀錄檔記錄
1) 命令開啟
set global slow_query_log =1; //只對當前對談生效,重啟失效
執行成功
再次執行
show variables like '%slow_query_log%';
先關閉使用者端連線,再進行重新連線,即可看到設定生效
發現開啟了mysqldumpslow調優工具
mysql> show variables like '%slow_query_log%'; +---------------------+-------------------------------------------+ | Variable_name | Value | +---------------------+-------------------------------------------+ | slow_query_log | ON | | slow_query_log_file | /opt/mysql-5.7.28/data/linux-141-slow.log | +---------------------+-------------------------------------------+ 2 rows in set (0.02 sec) mysql>
2)組態檔開啟
vim my.cnf 在[mysqld]下新增: slow_query_log = 1 slow_query_log_file = /opt/mysql-5.7.28/data/linux-141-slow.log 重啟MySQL服務
修改並且重啟後
發現開啟了mysqldumpslow調優工具
mysql> show variables like '%slow_query_log%'; +---------------------+-------------------------------------------+ | Variable_name | Value | +---------------------+-------------------------------------------+ | slow_query_log | ON | | slow_query_log_file | /opt/mysql-5.7.28/data/linux-141-slow.log | +---------------------+-------------------------------------------+ 2 rows in set (0.02 sec) mysql>
3)哪些 SQL 會記錄到慢查詢紀錄檔
-- 檢視閥值(大於),預設10s show variables like 'long_query_time%';
預設值是10秒
4)如何設定查詢閥值
命令設定
-- 設定慢查詢閥值 set global long_query_time = 1;
備註:另外開一個session或重新連線 ,才會看到變化
執行成功發發現慢sql的時間變成了1秒
組態檔設定:
vim my.cnf [mysqld] long_query_time = 1 log_output = FILE 重啟MySQL服務
執行成功發發現慢sql的時間變成了1秒
5)如何把未使用索引的 SQL 記錄寫入慢查詢紀錄檔
-- 檢視設定,預設關閉 show variables like 'log_queries_not_using_indexes';
我們發現,未使用索引的sql預設是不記錄到慢查詢紀錄檔的
開啟設定:
set global log_queries_not_using_indexes = on;
執行如下:
6)模擬資料
-- 睡眠2s再執行 select sleep(2); -- 檢視慢查詢條數 show global status like '%Slow_queries%';
我們發現,每執行一次select sleep(2),之後,再通過show global status ...命令,他的值就會+1
語法格式
mysqldumpslow [ OPTS... ] [ LOGS... ] //命令列格式
常用到的格式組合:
1、拿到慢紀錄檔路徑
show variables like '%slow_query_log%';
紀錄檔路徑為:/opt/mysql-5.7.28/data/linux-141-slow.log
檢視紀錄檔
[root@linux-141 mysql-5.7.28]# cat /opt/mysql-5.7.28/data/linux-141-slow.log /opt/mysql-5.7.28/bin/mysqld, Version: 5.7.28-log (MySQL Community Server (GPL)). started with: Tcp port: 3306 Unix socket: /tmp/mysql.sock Time Id Command Argument # Time: 2021-09-15T01:40:31.342430Z # User@Host: root[root] @ [192.168.36.1] Id: 2 # Query_time: 2.000863 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 use itcast; SET timestamp=1631670031; -- 睡眠2s再執行 select sleep(2); [root@linux-141 mysql-5.7.28]#
2、得到存取次數最多的10條SQL
[root@linux-141 mysql-5.7.28]# ./bin/mysqldumpslow -s r -t 10 /opt/mysql-5.7.28/data/linux-141-slow.log -bash: ./bin/mysqldumpslow: /usr/bin/perl: 壞的直譯器: 沒有那個檔案或目錄 [root@linux-141 mysql-5.7.28]# yum -y install perl perl-devel [root@linux-141 mysql-5.7.28]# ./bin/mysqldumpslow -s r -t 10 /opt/mysql-5.7.28/data/linux-141-slow.log
3、按照時間排序的前10條裡面含有左連線的SQL
[root@linux-141 mysql-5.7.28]# ./bin/mysqldumpslow -s t -t 10 -g "left join" /opt/mysql-5.7.28/data/linux-141-slow.log Reading mysql slow query log from /opt/mysql-5.7.28/data/linux-141-slow.log Died at ./bin/mysqldumpslow line 167, <> chunk 28. [root@linux-141 mysql-5.7.28]#
1、檢視慢查詢紀錄檔
[root@linux-141 mysql-5.7.28]# cat /opt/mysql-5.7.28/data/linux-141-slow.log /opt/mysql-5.7.28/bin/mysqld, Version: 5.7.28-log (MySQL Community Server (GPL)). started with: Tcp port: 3306 Unix socket: /tmp/mysql.sock Time Id Command Argument # Time: 2021-09-15T01:40:31.342430Z # User@Host: root[root] @ [192.168.36.1] Id: 2 # Query_time: 2.000863 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 use itcast; SET timestamp=1631670031; -- 睡眠2s再執行 select sleep(2); # Time: 2021-09-15T01:50:32.130305Z # User@Host: root[root] @ [192.168.36.1] Id: 2 # Query_time: 3.001904 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1631670632; select sleep(3); # Time: 2021-09-15T01:50:55.064372Z # User@Host: root[root] @ [192.168.36.1] Id: 2 # Query_time: 4.008082 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1631670655; select sleep(4); # Time: 2021-09-15T01:51:01.343463Z # User@Host: root[root] @ [192.168.36.1] Id: 2 # Query_time: 5.007035 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1631670661; select sleep(5); # Time: 2021-09-15T01:51:07.737834Z ###### 執行SQL時間 # User@Host: root[root] @ [192.168.36.1] Id: 2 ###### 執行SQL的主機資訊 # Query_time: 6.009129 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 ###### SQL的執行資訊 SET timestamp=1631670667; ###### SQL執行時間 select sleep(6); ###### SQL內容 [root@linux-141 mysql-5.7.28]#
屬性解釋
# Time: 2021-09-15T01:51:07.737834Z ###### 執行SQL時間 # User@Host: root[root] @ [192.168.36.1] Id: 2 ###### 執行SQL的主機資訊 # Query_time: 6.009129 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 ###### SQL的執行資訊 SET timestamp=1631670667; ###### SQL執行時間 select sleep(6); ###### SQL內容
tips:
show profile,它也是調優工具
也是MySQL服務自帶的分析調優工具
不過這款更高階
比較接近底層硬體引數的調優。
簡介:
show profile是MySQL服務自帶更高階的分析調優工具
比較接近底層硬體引數的調優
1、檢視show profile設定
-- 預設關閉,儲存近15次的執行結果 show variables like 'profiling%';
通過上面我們發現,show profile工具預設是關閉狀態,15表示儲存了近15次的執行結果。
2、開啟調優工具
執行下面的命令開啟
SET profiling = ON;
再次檢視狀態
show variables like 'profiling%';
3、檢視最近15次的執行結果
-- 檢視最近15次的執行結果 show profiles; -- 可以顯示警告和報錯的資訊 show warnings; -- 慢查詢語句 SELECT * FROM product_list WHERE store_name = '聯想北達興科專賣店';
顯示最近15次的執行結果
4、診斷執行的SQL
接下來,我們一起診斷一下query id為23的慢查詢
-- 語法 SHOW PROFILE cpu,block io FOR QUERY query id; -- 範例 SHOW PROFILE cpu,block io FOR QUERY 129;
開始執行:
解釋:通過Status一列,可以看到整條SQL的執行過程
檢視型別選項 SHOW PROFILE...後面的列,即:SHOW PROFILE ALL, BLOCK IO, ... FOR QUERY 209; ALL //顯示索引的開銷資訊 BLOCK IO //顯示塊IO相關開銷 CONTEXT SWITCHES //上下文切換相關開銷 CPU //顯示CPU相關開銷資訊 IPC //顯示傳送和接收相關開銷資訊 MEMORY //顯示記憶體相關開銷資訊 PAGE FAULTS //顯示頁面錯誤相關開銷資訊 SOURCE //顯示和source_function,source_file,source_line相關的開銷資訊 SWAPS //顯示交換次數相關開銷的資訊
重要提示:
如出現以下一種或者幾種情況,說明SQL執行效能極其低下,亟需優化 * converting HEAP to MyISAM //查詢結果太大,記憶體都不夠用了往磁碟上搬了 * Creating tmp table //建立臨時表:拷貝資料到臨時表,用完再刪 * Copying to tmp table on disk //把記憶體中臨時表複製到磁碟,危險 * locked //出現死鎖
到此這篇關於MySQL常用慢查詢分析工具詳解的文章就介紹到這了,更多相關MySQL慢查詢工具內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45