MySQL慢查询分析工具slow-log-summary
项目地址:
https://github.com/slowtech/slow-log-summary
# wget https://github.com/slowtech/slow-log-summary/releases/download/v1.0.0/slow-log-summary-linux-amd64.tar.gz
# tar xvf slow-log-summary-linux-amd64.tar.gz
解压后,会在当前目录生成一个名为 slow-log-summary 的可执行文件
参数详解:
# ./slow-log-summary --help
slow-log-summary version: 1.0.0
Usage:
slow-log-summary -source <source_type> -r <output_file> [other options]
Example:
./slow-log-summary -source perf -h 10.0.0.168 -P 3306 -u root -p '123456'
./slow-log-summary -source slowlog -pt /usr/local/bin/pt-query-digest -slowlog /data/mysql/3306/data/n1-slow.log
Common Options:
-help
Display usage
Source Type Options:
-source string
Slow log source: 'perf' or 'slowlog' (default "perf")
Output File Options:
-r string
Direct output to a given file (default "/tmp/slow-log-summary-20060102-150405.html")
Options when source is 'perf':
-h string
MySQL host (default "localhost")
-P int
MySQL port (default 3306)
-u string
MySQL username (default "root")
-p string
MySQL password
-D string
MySQL database (default "performance_schema")
Options when source is 'slowlog':
-pt string
Absolute path for pt-query-digest. Example: /usr/local/bin/pt-query-digest
-slowlog string
Absolute path for slowlog. Example: /var/log/mysql/node1-slow.log
-since string
Parse only queries newer than this value, YYYY-MM-DD [HH:MM:SS]
-until string
Parse only queries older than this value, YYYY-MM-DD [HH:MM:SS]
-yday
Parse yesterday's slowlog
-source:指定慢查询汇总报告的来源。可设置 perf(performance_schema),也可设置 slowlog(慢日志 + pt-query-digest)。
-r:慢查询汇总报告文件名。如果不指定,则默认为 "/tmp/slow-log-summary-当前时间.html",例如 /tmp/slow-log-summary-20060102-150405.html。
当 source 设置为 perf 时,我们需要设置实例的连接信息,包括:
-h:主机名,默认是 localhost。
-P:端口,默认是 3306。
-u:用户名,默认是 root。
-p:密码。
-D:库名,默认是 performance_schema。
当 source 设置为 slowlog 时,因为该工具是基于pt-query-digest对慢日志进行分析,所以需要通过 -pt 设置pt-query-digest的绝对路径和 -slowlog 设置慢日志的绝对路径。
还可指定分析的时间范围,默认是分析整个慢日志,也可指定 -yday 只分析昨天的慢日志,或者通过 -since 和 -until 指定具体的开始时间和结束时间
用法:
基于 performance_schema 生成慢查询报告
# ./slow-log-summary -source perf -h 10.0.0.137 -P 3306 -u root -p 123456 -r slow-log-summary.html
Output written to file slow-log-summary.html
不在命令行中指定密码
# ./slow-log-summary -source perf -h 10.0.0.137 -P 3306 -u root
Enter MySQL password:
Output written to file /tmp/slow-log-summary-20231113-204738.html
基于慢日志和 pt-query-digest 生成慢查询报告
分析整个慢日志
# ./slow-log-summary -source slowlog -pt /usr/local/bin/pt-query-digest -slowlog /data/mysql/3306/data/n1-slow.log
分析昨天的慢日志
# ./slow-log-summary -source slowlog -pt /usr/local/bin/pt-query-digest -slowlog /data/mysql/3306/data/n1-slow.log -yday
分析指定时间段的慢日志
# ./slow-log-summary -source slowlog -pt /usr/local/bin/pt-query-digest -slowlog /data/mysql/3306/data/n1-slow.log -since '2023-11-04 08:01:00' -until '2023-11-04 08:10:00'
注意:
events_statements_summary_by_digest 表的记录数由 performance_schema_digests_size 参数控制。
该参数虽然是基于 max_connections、table_definition_cache、table_open_cache 的值动态生成,但对于生产系统,一般默认是 10000。
如果记录数满了,Performance Schema 会将新的 SQL 的 SCHEMA_NAME 和 DIGEST 设置为 NULL,同时增加 Performance_schema_digest_lost 变量的值。
如果我们看到表中 SCHEMA_NAME 和 DIGEST 为 NULL 的记录中的 COUNT_STAR(执行次数)的值比较大,可适当调大 performance_schema_digests_size 的值