慢查询日志分析工具:mysqldumpslow

455 阅读2分钟

慢查询日志分析工具:mysqldumpslow

mysqldumpslow 是MySQL提供的日志分析工具,用于帮我们分析日志,查找、分析SQL。

查看mysqldumpslow的用法

[root@CHENG bin]# 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 是order的顺序
    • al 平均锁定时间
    • ar 平均返回记录时间
    • at 平均查询时间(默认)
    • c 计数
    • 锁定时间
    • r 返回记录
    • t 查询时间
  • -t 是top n的意思,即为返回前面多少条的数据
  • -g 后边可以写一个正则匹配模式,大小写不敏感的

解决 bash: mysqldumpslow: command not found

这个错误是因为 mysqldumpslow不在/usr/bin下面,我们需要找到 mysqldumpslow (一般是在mysql的安装目录下)安装目录,然后做一个软链接到/usr/bin下。我的mysqldumpslow路径为 /usr/local/mysql/bin

ln -s /usr/local/mysql/bin/mysqldumpslow /usr/bin

mysqldumpslow 的使用

# /data/mysql/CHENG-slow.log 慢查询日志路径
[root@CHENG mysql]# mysqldumpslow -a -s t -t 5 /data/mysql/CHENG-slow.log 

Reading mysql slow query log from /data/mysql/CHENG-slow.log
Count: 1  Time=356.29s (356s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@[58.242.191.115]
  /* ApplicationName=DataGrip 2021.1 */ call insert_stu1(100001,4000000) # 调用存储过程的sql

Count: 1  Time=1.39s (1s)  Lock=0.00s (0s)  Rows=1.0 (1), root[root]@localhost
  select count(*) from student

Died at /usr/bin/mysqldumpslow line 167, <> chunk 2.

删除慢查询日志

慢查询日志的删除方法与通用日志的删除方法是一样的。可以使用 mysqladmin 命令来删除。也可以使用手工方式(rm -rf)来删除。mysqladmin 命令的语法如下:mysqladmin 命令会重新生成查询日志文件

mysqladmin -uroot -p flush-logs slow

执行该命令后,命令行会提示输入密码。输入正确密码后,将执行删除操作。新的慢查询日志会直接覆盖旧的查询日志,不需要再手动删除。

数据库管理员也可以手工删除慢查询日志,删除之后需要重新启动 MySQL 服务。

注意:通用查询日志和慢查询日志都是使用这个命令,使用时一定要注意,一旦执行这个命令,通用查询日志和慢查询日志都只存在新的日志文件中。如果需要备份旧的慢查询日志文件,必须先将旧的日志改名,然后重启 MySQL 服务或执行 mysqladmin 命令。