查询

慢查询,顾名思义就是数据库中运行比较慢的 SQL 语句,MySQL 这个功能需要开启才能用;

1
2
3
4
5
6
7
8
9
10
11
12
show variables like '%slow_query_log%';
* slow_query_log //是否开启,默认关闭,建议调优时才开启
* slow_query_log_file //慢查询日志存放目录
show variables like 'long_query_time%';
* 查看阀值(大于),默认 10s
show variables like '%log_output%';
* 查看慢查询日志记录方式
set global slow_query_log =1; //只对当前会话生效,重启失效
set global long_query_time = 1//设置慢查询阀值
把未使用索引的 SQL 记录写入慢查询日志:
show variables like 'log_queries_not_using_indexes'; //查看设置,默认关闭
set global log_queries_not_using_indexes = on; //设置

以上设置服务重启后失效,永久开启需要修改配置文件;
1
2
3
4
5
6
vi my.cnf
在[mysqld]下添加:
slow_query_log = 1 //开启慢查询
long_query_time = 1 //设置慢查询阈值
log_output = File,TABLE //设置慢查询记录方式,File 是文件,Table 会写入 mysql.slow_log 表
slow_query_log_file = /var/lib/mysql/slow.log //设置慢查询日志位置

保存以后,重启 MySQL 服务即可。

分析

分析工具有很多,本文使用的是 Percona-Toolkit 中的 pt-query-digest 进行分析

安装

https://www.percona.com/downloads/percona-toolkit/3.3.1/binary/redhat/7/

1
2
3
4
5
6
7
8
#安装软件源
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
#查询是否安装正确
yum list | grep percona-toolkit
#安装
yum install percona-toolkit

yum install https://downloads.percona.com/downloads/percona-toolkit/3.3.1/binary/redhat/7/x86_64/percona-toolkit-3.3.1-1.el7.x86_64.rpm

使用

1
2
3
4
pt-query-digest --help
pt-table-checksum --help

/usr/bin/pt-query-digest --user=root --password=XXXXXXXX --port=3306 --review h=127.0.0.1,D=slow_query_log,t=global_query_review --history h=127.0.0.1,D=slow_query_log,t=global_query_review_history --no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" /var/log/mysqld-slow.log

显示

从 Github 中找到几个 UI 项目,基本都是通过上述工具分析将结果写入新库,然后通过 PHP 等调用
https://dbaplus.cn/news-11-2520-1.html