mysqldumpslow工具

孤竹星發表於2018-12-25

mysqldumpslow工具

開啟慢查詢

檢視慢查詢相關引數

slow_query_log:慢查詢是否開啟

slow_query_log_file:慢查詢檔案位置

long_query_time:超過多長時間記錄

log_queries_not_using_indexes:沒有使用索引的sql

mysql> show variables like 'slow_query%';

+---------------------+----------------------------+

| Variable_name       | Value                      |

+---------------------+----------------------------+

| slow_query_log      | ON                         |

| slow_query_log_file | /var/lib/mysql/db-slow.log |

+---------------------+----------------------------+

2 rows in set (0.01 sec)


mysql> show variables like 'long_query_time';     

+-----------------+----------+

| Variable_name   | Value    |

+-----------------+----------+

| long_query_time | 2.000000 |

+-----------------+----------+

1 row in set (0.00 sec)

mysql> show variables like 'log_queries_not%';

+-------------------------------+-------+

| Variable_name                 | Value |

+-------------------------------+-------+

| log_queries_not_using_indexes | OFF   |

+-------------------------------+-------+

1 row in set (0.00 sec)


設定方法

方法1:全域性變數設定

mysql> set global slow_query_log='ON'; 

mysql> set global slow_query_log_file='/var/lib/mysql/db-slow.log';

mysql> set global long_query_time=2;

mysql> set global log_queries_not_using_indexes=1;


方法2:配置檔案設定

修改配置檔案my.cnf在[mysqld]下加入如下內容


slow_query_log = ON

slow_query_log_file = /var/lib/mysql/db-slow.log 

long_query_time = 2

log_queries_not_using_indexes=1


修改後重啟mysql服務


測試

mysql> select sleep(3); 

[root@db ~]# tail -f /var/lib/mysql/db-slow.log

# Time: 2018-12-25T08:00:48.199670Z

# User@Host: root[root] @ localhost []  Id: 2443797

# Query_time: 3.000198  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0

SET timestamp=1545724848;

select sleep(3);


[root@db ~]# mysqldumpslow --help

Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]


Parse and summarize the MySQL slow query log. Options are


  --verbose    verbose

  --debug      debug

  --help       write this text to standard output


  -v           verbose

  -d           debug

  -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default

                al: average lock time

                ar: average rows sent

                at: average query time

                 c: count

                 l: lock time

                 r: rows sent

                 t: query time  

  -r           reverse the sort order (largest last instead of first)

  -t NUM       just show the top n queries

  -a           don't abstract all numbers to N and strings to 'S'

  -n NUM       abstract numbers with at least n digits within names

  -g PATTERN   grep: only consider stmts that include this string

  -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),

               default is '*', i.e. match all

  -i NAME      name of server instance (if using mysql.server startup script)

  -l           don't subtract lock time from total time


常用引數

-s 排序方式 後面跟排序列 

al 平均鎖定時間

ar 平均返回記錄時間

at 平均查詢時間(預設)

c  計數

l 鎖定時間

r 返回記錄

t 查詢時間

-r 反向排序,最大的在最後

-t 後面跟數字,返回行數

-a 不將所有的數字抽象為N,字串抽象為S

-n 後面跟數字,在名稱中至少有n個數字抽象為數字

-g 正則後邊可以寫一個正則匹配模式,大小寫不敏感的


案例:

1.根據計數返回5條記錄

mysqldumpslow -s c -t 5 /var/lib/mysql/db-slow.log

2.根據返回記錄返回5條記錄

mysqldumpslow -s r -t 5 /var/lib/mysql/db-slow.log

3.根據查詢時間返回5條記錄

mysqldumpslow -s t -t 5 /var/lib/mysql/db-slow.log

4.根據計數統計,不抽象數字及字串

mysqldumpslow -s c -a -t 5 /var/lib/mysql/db-slow.log


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28282660/viewspace-2286399/,如需轉載,請註明出處,否則將追究法律責任。

相關文章