慢SQL分析神器 ptdigest !

做性能优化,针对慢SQL的优化是一大关键。优化的前提是你要能找到代码中有哪些慢SQL,这样才能有针对性的下手。那如何找呢?如何分析呢?这就要借助强大的工具了,下面一一道来!

一、pt-query-digest 是什么,有什么作用?

pt-query-digest 是 Percona Toolkit 工具套件中的一个工具,用于分析 MySQL/MariaDB 查询日志文件。它能够解析查询日志,并将其转换为易于理解的报告和统计信息,以帮助诊断性能问题和优化查询。

  1. 性能分析:pt-query-digest 可以分析查询日志,并为每个查询提供响应时间、查询次数等统计信息。这有助于识别慢查询和高负载查询,并确定哪些查询最需要优化。
  2. 查询优化:pt-query-digest 生成的报告还包括关于每个查询的详细信息,例如使用了哪些索引、查询的执行计划等。这些信息有助于识别可以改进的查询和优化查询。
  3. 性能监控:pt-query-digest 还支持在多个查询日志文件之间定期运行,以便实时监视 MySQL/MariaDB 性能。

那么,如何才能使用pt-query-digest工具呢?

二、安装 pt-query-digest

因为pt-query-digest 工具是 Percona Toolkit 工具套件的一部分,因此安装 pt-query-digest 也需要安装 Percona Toolkit。下面是在不同平台上安装 pt-query-digest 的示例:

  1. 在 Ubuntu 上安装 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. 在 CentOS/RHEL 上安装 pt-query-digest

(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. 在 macOS 上安装 pt-query-digest

(1)使用 Homebrew 安装 Percona Toolkit

brew install percona-toolkit

(2)安装完成后,pt-query-digest 工具将可用于终端

  1. 在 Windows 上安装 pt-query-digest

(1)下载 Windows 版本的 Percona Toolkit 安装程序

https://www.percona.com/downloads/percona-toolkit/LATEST/

(2)运行安装程序并按照提示完成安装

安装完成后,在命令行中输入 pt-query-digest 命令,如果成功执行则说明安装成功。

三、使用 pt-query-digest

安装完成后,我们就可以使用神器分析数据库的慢SQL日志。如果数据库没有开启慢查询日志,不会记录慢查询,所以要想取得slow.log,先开启慢慢查询日志!

MySQL可以按照以下步骤,开启慢查询日志:

  1. 编辑 MySQL 配置文件 my.cnf,一般情况下可以在 /etc/my.cnf 或者 /etc/mysql/my.cnf 目录下找到该文件。
  2. 在 [mysqld] 节点下添加以下配置项:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

其中:

  1. 保存并关闭 my.cnf 文件。
  2. 重启 MySQL 服务,以使新的配置生效。
  3. 使用 MySQL 客户端连接到数据库,执行一些查询操作,等待一段时间后(默认是超过 2 秒),再去查看慢查询日志文件 /var/log/mysql/slow.log,即可看到记录的慢查询 SQL 语句和相应的执行时间等信息。

注意:开启慢查询日志可能会对 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为例:

Top Slow SQL

分析报告显示了慢查询的排名、查询 ID、响应时间、调用次数等信息。

Query 1 SQL 分析

还有每个Top slow SQL 的详细信息!

Query 2 SQL 分析

有了它,我们就可以按照报告的慢SQL逐一优化了。

展开阅读全文

页面更新:2024-04-26

标签:神器   语句   路径   性能   数据库   文件   时间   工具   报告   日志   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top