做性能优化,针对慢SQL的优化是一大关键。优化的前提是你要能找到代码中有哪些慢SQL,这样才能有针对性的下手。那如何找呢?如何分析呢?这就要借助强大的工具了,下面一一道来!
pt-query-digest 是 Percona Toolkit 工具套件中的一个工具,用于分析 MySQL/MariaDB 查询日志文件。它能够解析查询日志,并将其转换为易于理解的报告和统计信息,以帮助诊断性能问题和优化查询。
那么,如何才能使用pt-query-digest工具呢?
因为pt-query-digest 工具是 Percona Toolkit 工具套件的一部分,因此安装 pt-query-digest 也需要安装 Percona Toolkit。下面是在不同平台上安装 pt-query-digest 的示例:
(1)添加 Percona 的 apt 存储库
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
sudo apt-get update
(2)安装 Percona Toolkit
sudo apt-get install percona-toolkit
(1)添加 Percona 的 yum 存储库
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
sudo percona-release setup ps80
注:这里假设您使用的是 Percona Server 8.0。如果使用的是其他版本,请将 ps80 替换为相应的版本号。
(2)安装 Percona Toolkit
sudo yum install percona-toolkit
(1)使用 Homebrew 安装 Percona Toolkit
brew install percona-toolkit
(2)安装完成后,pt-query-digest 工具将可用于终端
(1)下载 Windows 版本的 Percona Toolkit 安装程序
https://www.percona.com/downloads/percona-toolkit/LATEST/
(2)运行安装程序并按照提示完成安装
安装完成后,在命令行中输入 pt-query-digest 命令,如果成功执行则说明安装成功。
安装完成后,我们就可以使用神器分析数据库的慢SQL日志。如果数据库没有开启慢查询日志,不会记录慢查询,所以要想取得slow.log,先开启慢慢查询日志!
MySQL可以按照以下步骤,开启慢查询日志:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
其中:
注意:开启慢查询日志可能会对 MySQL 的性能产生一定的影响,因此建议在需要排查性能问题时才开启。如果需要定期清理慢查询日志文件,可以使用 logrotate 工具对日志文件进行轮换和压缩,以避免日志文件过大。
有了slow.log,我们就可运行 pt-query-digest进行分析了!
使用以下命令运行 pt-query-digest 工具:
pt-query-digest [OPTIONS] [LOGS]
其中 [OPTIONS] 是工具的选项,[LOGS] 是查询日志的路径。
以下是 [OPTIONS] 其中一些常用的参数:
--filter:用于指定需要分析的查询日志的筛选条件,可以使用多个 -f 参数进行组合,例如 --filter '($event->{db} eq "mydb") and ($event->{user} eq "myuser")' 表示只分析数据库为 mydb,用户名为 myuser 的查询日志。
--limit:指定分析的日志条目数,例如 --limit 1000 表示只分析前 1000 条查询日志。
--since:指定从哪个时间点开始分析,例如 --since "2019-01-01 00:00:00" 表示从 2019 年 1 月 1 日 00:00:00 开始分析。
--until:指定截止到哪个时间点停止分析,例如 --until "2019-01-31 23:59:59" 表示分析到 2019 年 1 月 31 日 23:59:59 为止的查询日志。
--group-by:指定分析结果按照哪个字段进行分组,例如 --group-by fingerprint 表示按照 SQL 语句的指纹(即相同的 SQL 语句)进行分组。
--limit-by:指定按照哪个字段进行限制,例如 --limit-by Query_time:max 表示限制分析结果按照查询执行时间的最大值进行排序。
--output:指定输出格式,包括 stdout(标准输出)、file(输出到文件)、json、json-pretty、json-without-comments、query-digest 等格式。
--charset:指定输入文件的字符集,例如 --charset utf8mb4 表示输入文件的字符集为 utf8mb4。
--version:显示工具的版本信息。
--type: 指定日志类型,包括 general、slow、binlog、tcpdump、audit、json、perf、pttrace 等。
--no-report: 不生成报告,只打印分析结果。
--limit-lines: 指定最多显示的分析结果行数。
--order-by: 指定分析结果按照哪个字段进行排序,包括 Query_time、Lock_time、Rows_sent、Rows_examined 等。
--reverse: 指定分析结果按照倒序排序。
--progress: 显示分析进度。
--explain: 分析结果中包含 SQL 语句的执行计划。
--sample: 随机抽样,指定抽样比例,例如 --sample 1 表示抽样 100%。
--no-memory-reports: 不生成内存报告,加快分析速度。
--user: 指定连接 MySQL 数据库的用户名。
--password: 指定连接 MySQL 数据库的密码。
--port: 指定连接 MySQL 数据库的端口号,默认为 3306。
--socket: 指定连接 MySQL 数据库的 Unix 套接字路径。
--review: 分析结果中包含 SQL 语句的建议,例如添加索引等。
--limit-rank: 指定分析结果中只包含排名前几的查询,例如 --limit-rank 10 表示只分析排名前 10 的查询。
--report-format: 指定报告输出格式,包括 txt、tsv、tab-separated、csv、excel 等。
--history: 从历史查询日志中分析查询效率变化,可以指定查询日志文件路径或 MySQL 数据库连接信息。
--watch: 实时监控 MySQL 查询效率变化,可以指定查询日志文件路径或 MySQL 数据库连接信息。
--no-version-check: 关闭版本检查。
--sleep: 指定监控间隔时间,例如 --sleep 10 表示每隔 10 秒进行一次监控。
例如,以下命令分析名为 slow.log 的查询日志文件:
pt-query-digest /var/log/mysql/slow.log > slow_report.log
pt-query-digest --since=1h /var/log/mysql/slow.log > slow_report.log
pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' /var/log/mysql/slow.log > slow_report.log
pt-query-digest /var/log/mysql/slow.log --since '2022-11-14 12:30:00' --until '2022-11-14 23:30:00' > slow_report.log
运行完,pt-query-digest 工具将生成一个分析报告,其中包含有关查询的各种统计信息。常见的分析指标包括查询数量、查询类型、查询时间、查询响应时间、慢查询等。分析报告还将显示查询分布、高频查询、重复查询等信息。
以上面 分析指定时间范围内的查询 生成的report为例:
分析报告显示了慢查询的排名、查询 ID、响应时间、调用次数等信息。
还有每个Top slow SQL 的详细信息!
有了它,我们就可以按照报告的慢SQL逐一优化了。
页面更新:2024-04-26
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号