mysqldumpslow慢查詢
一直以來積累了很多對MySQL最佳化的心得和經驗,計劃透過寫日誌的方式一步一步寫出來分享給大家。
MySQL最佳化的第一步應該做的就是排查問題,找出瓶頸,而通常情況下的瓶頸和問題都需要透過觀察MySQL的執行情況來進行分析,《》這篇文章羅列了一些常用的檢視MySQL執行資訊的方式。
而對於大多數的程式設計師來說,最容易發現並解決的問題就是MySQL的慢查詢或者沒有利用索引的查詢,所以這裡主要給大家介紹如何利用官方的mysqldumpslow工具方便的檢視這些資訊。如何開啟MySQL的慢查詢,請點選《》。
mysqldumpslow命令
/path/mysqldumpslow -s c -t 10 /database/mysql/slow-log
這會輸出記錄次數最多的10條SQL語句,其中:
- -s, 是表示按照何種方式排序,c、t、l、r分別是按照記錄次數、時間、鎖定時間、返回的記錄數來排序,ac、at、al、ar,表示相應的平均;
- -t, 是top n的意思,即為返回前面多少條的資料;
- -g, 後邊可以寫一個正則匹配模式,大小寫不敏感的;
比如
/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log
得到返回記錄集最多的10個查詢。
/path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log
得到按照時間排序的前10條裡面含有左連線的查詢語句。
小結
使用mysqldumpslow命令可以非常明確的得到各種我們需要的查詢語句,對MySQL查詢語句的監控、分析、最佳化是MySQL最佳化的第一步,也是非常重要的一步。
-
mysqldumpslow --help可顯示其引數的使用
-
-
經常使用的引數:
-
-s,是order的順序
-
al 平均鎖定時間
-
ar 平均返回記錄時間
-
at 平均查詢時間(預設)
-
c 計數
-
l 鎖定時間
-
r 返回記錄
-
t 查詢時間
-
-
-
-t,是top n的意思,即為返回前面多少條的資料
-
-g,後邊可以寫一個正則匹配模式,大小寫不敏感的
-
例子:
-
mysqldumpslow -t 10 -s t -g “left join” host-slow.log
-
使用mysqldumpslow的分析結果不會顯示具體完整的sql語句,說明:
-
-
1:假如真正的sql語句如下:
-
SELECT * FROM sms_send WHERE service_id=10 GROUP BY content LIMIT 0, 1000;
-
-
mysqldumpslow顯示的結果會是:
-
Count: 1 Time=1.91s (1s) Lock=0.00s (0s) Rows=1000.0 (1000), vgos_dba[vgos_dba]@[10.130.229.196]
-
SELECT * FROM sms_send WHERE service_id=N GROUP BY content LIMIT N, N;
-
-
2:如果我們再執行一條
-
SELECT * FROM sms_send WHERE service_id=20 GROUP BY content LIMIT 10000, 1000;
-
-
mysqldumpslow顯示的結果會是:
-
Count: 2 Time=2.79s (5s) Lock=0.00s (0s) Rows=1.0 (2), vgos_dba[vgos_dba]@[10.130.229.196]
-
SELECT * FROM sms_send WHERE service_id=N GROUP BY content LIMIT N, N;
-
-
雖然這兩條語句條件不一樣,
-
1:一個是server_id=10,一個是server_id=20
-
2:一個是LIMIT 0, 1000,一個是LIMIT 10000, 1000
-
但是mysqldumpslow分析會認為這是一種型別的語句,會合並顯示。
-
-
3:假設我們執行
-
SELECT * FROM sms_send WHERE service_id<=10 GROUP BY content LIMIT 0, 1000;
-
-
執行mysqldumpslow結果是
-
Count: 1 Time=2.91s (2s) Lock=0.00s (0s) Rows=1000.0 (1000), vgos_dba[vgos_dba]@[10.130.229.196]
-
SELECT * FROM sms_send WHERE service_id<=N GROUP BY content LIMIT N, N;
-
-
可以看出它和上面我們寫的sql語句是兩種型別
-
mysqldumpslow的分析結果
-
Count會告訴我們這種型別的語句執行了幾次
-
Time會告訴我們這種型別的語句執行的最大時間
-
Time=2.79s (5s)中(5s)是指這型別的語句執行總共花費的時間
-
例:
-
Count: 2 Time=2.79s (5s) Lock=0.00s (0s) Rows=1.0 (2), vgos_dba[vgos_dba]@[10.130.229.196]
-
-
告訴我們執行了2次
-
最大時間是2.79s
-
總共花費時間5s
-
lock時間0s
-
單次返回的結果數是1條記錄
-
2次總共返回2條記錄
-
-
mysqldumpslow -s t -t 10 slow.log
-
查詢的結果是10條執行時間最慢的sql語句,其中-s t是指此類型別的語句的執
-
行總時長
-
-
Count: 1 Time=2.91s (2s) Lock=0.00s (0s) Rows=1000.0 (1000), vgos_dba[vgos_dba]@[10.130.229.196]
-
和
-
Count: 2 Time=2.79s (5s) Lock=0.00s (0s) Rows=1.0 (2), vgos_dba[vgos_dba]@[10.130.229.196]
-
比較的結果是
-
Count: 2 Time=2.79s (5s) Lock=0.00s (0s) Rows=1.0 (2), vgos_dba[vgos_dba]@[10.130.229.196]
-
排在前面,因為比較的時長是(5s)和(2s),而不是2.79s和2.91s
-
-
-s at比較的也是(5s)/count:2和(2s)/Count: 1
-
所以:-s at是
-
Count: 1 Time=2.91s (2s) Lock=0.00s (0s) Rows=1000.0 (1000), vgos_dba[vgos_dba]@[10.130.229.196]
-
排在前面。
-
-
Rows=1.0 (2) 是按照以下邏輯展示的
-
(2)是指在Count: 2次數總共返回了2條記錄集;row=1.0顯示(2)/Count: 2,
-
如果此時Count是3,那麼row的計算方式是Rows=2/3,Rows=0.67
-
- 主要功能是, 統計不同慢sql的出現次數(Count),執行最長時間(Time),累計總耗費時間(Time),等待鎖的時間(Lock),傳送給客戶端的行總數(Rows),掃描的行總數(Rows)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-1817535/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 慢查詢分析調優工具~mysqldumpslowMySql
- MySQL慢查詢分析工具之mysqldumpslowMySql
- 【MySql】mysql 慢日誌查詢工具之mysqldumpslowMySql
- Mysql優化_慢查詢開啟說明及Mysql慢查詢分析工具mysqldumpslow用法講解MySql優化
- MySQL優化 - 開啟MySQL慢查詢日誌及分析工具mysqldumpslowMySql優化
- 慢查詢
- MySQL 慢查詢MySql
- MySQL慢查詢MySql
- Redis 慢查詢Redis
- Mysql 慢日誌分析工具MysqldumpslowMySql
- mongodb慢查詢分析MongoDB
- 如何使用 MySQL 慢查詢日誌進行效能優化 - Profiling、mysqldumpslow 例項詳解MySql優化
- MySQL 慢查詢優化MySql優化
- SQL慢查詢排查思路SQL
- 詭異的”慢查詢“
- MongoDB慢查詢與索引MongoDB索引
- MySQL:慢查詢日誌MySql
- Mysql慢查詢操作梳理MySql
- MySQL開啟慢查詢MySql
- 使用慢查詢日誌
- mysql慢查詢日誌MySql
- 開啟查詢慢查詢日誌引數
- MySQL 慢查詢那點事MySql
- 瑞士軍刀redis - 慢查詢Redis
- 詳解MySQL--慢查詢MySql
- 檢視慢查詢進度
- 慢查詢日誌的管理
- MySQL 清空慢查詢檔案MySql
- oracle 跨庫查詢greenplum慢Oracle
- MySQLslowquery[慢查詢]資料整理MySql
- [Mysql]慢查詢最佳化MySql
- MySQL 慢查詢日誌——讓“慢”無所遁形MySql
- Linux下mysql配置慢日誌查詢,把查詢慢的sql記錄下來LinuxMySql
- linux下開啟mysql慢查詢,分析查詢語句LinuxMySql
- 慢查詢日誌開啟分析
- 資料庫查詢慢的原因資料庫
- Mysql 慢查詢優化實踐MySql優化
- 快速學會慢查詢SQL排查SQL