做性能优化,针对慢SQL的优化是一大关键。优化的前提是你要能找到代码中有哪些慢SQL,这样才能有针对性的下手。那如何找呢?如何分析呢?这就要借助强大的工具了,下面一一道来!一、ptquerydigest是什么,有什么作用? ptquerydigest是PerconaToolkit工具套件中的一个工具,用于分析MySQLMariaDB查询日志文件。它能够解析查询日志,并将其转换为易于理解的报告和统计信息,以帮助诊断性能问题和优化查询。性能分析:ptquerydigest可以分析查询日志,并为每个查询提供响应时间、查询次数等统计信息。这有助于识别慢查询和高负载查询,并确定哪些查询最需要优化。查询优化:ptquerydigest生成的报告还包括关于每个查询的详细信息,例如使用了哪些索引、查询的执行计划等。这些信息有助于识别可以改进的查询和优化查询。性能监控:ptquerydigest还支持在多个查询日志文件之间定期运行,以便实时监视MySQLMariaDB性能。 那么,如何才能使用ptquerydigest工具呢?二、安装ptquerydigest 因为ptquerydigest工具是PerconaToolkit工具套件的一部分,因此安装ptquerydigest也需要安装PerconaToolkit。下面是在不同平台上安装ptquerydigest的示例:在Ubuntu上安装ptquerydigest (1)添加Percona的apt存储库wgethttps:repo。percona。comaptperconareleaselatest。(lsbreleasesc)all。debsudodpkgiperconareleaselatest。(lsbreleasesc)all。debsudoaptgetupdate (2)安装PerconaToolkitsudoaptgetinstallperconatoolkit在CentOSRHEL上安装ptquerydigest (1)添加Percona的yum存储库sudoyuminstallhttps:repo。percona。comyumperconareleaselatest。noarch。rpmsudoperconareleasesetupps80 注:这里假设您使用的是PerconaServer8。0。如果使用的是其他版本,请将ps80替换为相应的版本号。 (2)安装PerconaToolkitsudoyuminstallperconatoolkit在macOS上安装ptquerydigest (1)使用Homebrew安装PerconaToolkitbrewinstallperconatoolkit (2)安装完成后,ptquerydigest工具将可用于终端在Windows上安装ptquerydigest (1)下载Windows版本的PerconaToolkit安装程序https:www。percona。comdownloadsperconatoolkitLATEST (2)运行安装程序并按照提示完成安装 安装完成后,在命令行中输入ptquerydigest命令,如果成功执行则说明安装成功。三、使用ptquerydigest 安装完成后,我们就可以使用神器分析数据库的慢SQL日志。如果数据库没有开启慢查询日志,不会记录慢查询,所以要想取得slow。log,先开启慢慢查询日志! MySQL可以按照以下步骤,开启慢查询日志:编辑MySQL配置文件my。cnf,一般情况下可以在etcmy。cnf或者etcmysqlmy。cnf目录下找到该文件。在〔mysqld〕节点下添加以下配置项:slowquerylog1slowquerylogfilevarlogmysqlslow。loglongquerytime2 其中:slowquerylog:表示是否开启慢查询日志,值为1时表示开启,值为0时表示关闭。slowquerylogfile:表示慢查询日志文件的路径和名称。longquerytime:表示查询执行时间超过多少秒的SQL语句才会被记录到慢查询日志中。保存并关闭my。cnf文件。重启MySQL服务,以使新的配置生效。使用MySQL客户端连接到数据库,执行一些查询操作,等待一段时间后(默认是超过2秒),再去查看慢查询日志文件varlogmysqlslow。log,即可看到记录的慢查询SQL语句和相应的执行时间等信息。 注意:开启慢查询日志可能会对MySQL的性能产生一定的影响,因此建议在需要排查性能问题时才开启。如果需要定期清理慢查询日志文件,可以使用logrotate工具对日志文件进行轮换和压缩,以避免日志文件过大。 有了slow。log,我们就可运行ptquerydigest进行分析了! 使用以下命令运行ptquerydigest工具:ptquerydigest〔OPTIONS〕〔LOGS〕 其中〔OPTIONS〕是工具的选项,〔LOGS〕是查询日志的路径。 以下是〔OPTIONS〕其中一些常用的参数:filter:用于指定需要分析的查询ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a的筛选条件,可以使用多个f参数进行组合,例如filter(event{db}eqmydb)and(event{user}eqmyuser)表示只分析数据库为mydb,用户名为myuser的查询ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a。limit:指定分析的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a条目数,例如limit1000表示只分析前1000条查询ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a。since:指定从哪个时间点开始分析,例如since2019010100:00:00表示从2019年1月1日00:00:00开始分析。until:指定截止到哪个时间点停止分析,例如until2019013123:59:59表示分析到2019年1月31日23:59:59为止的查询ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a。groupby:指定分析结果按照哪个字段进行分组,例如groupbyfingerprint表示按照SQL语句的指纹(即相同的SQL语句)进行分组。limitby:指定按照哪个字段进行限制,例如limitbyQuerytime:max表示限制分析结果按照查询执行时间的最大值进行排序。output:指定输出格式,包括stdout(标准输出)、file(输出到文件)、json、jsonpretty、jsonwithoutcomments、querydigest等格式。charset:指定输入文件的字符集,例如charsetutf8mb4表示输入文件的字符集为utf8mb4。version:显示工具的版本信息。type:指定ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a类型,包括general、slow、binlog、tcpdump、audit、json、perf、pttrace等。noreport:不生成报告,只打印分析结果。limitlines:指定最多显示的分析结果行数。orderby:指定分析结果按照哪个字段进行排序,包括Querytime、Locktime、Rowssent、Rowsexamined等。reverse:指定分析结果按照倒序排序。progress:显示分析进度。explain:分析结果中包含SQL语句的执行计划。sample:随机抽样,指定抽样比例,例如sample1表示抽样100。nomemoryreports:不生成内存报告,加快分析速度。user:指定连接MySQL数据库的用户名。password:指定连接MySQL数据库的密码。port:指定连接MySQL数据库的端口号,默认为3306。socket:指定连接MySQL数据库的Unix套接字路径。review:分析结果中包含SQL语句的建议,例如添加索引等。limitrank:指定分析结果中只包含排名前几的查询,例如limitrank10表示只分析排名前10的查询。reportformat:指定报告输出格式,包括txt、tsv、tabseparated、csv、excel等。history:从历史查询ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a中分析查询效率变化,可以指定查询ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件路径或MySQL数据库连接信息。watch:实时监控MySQL查询效率变化,可以指定查询ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件路径或MySQL数据库连接信息。noversioncheck:关闭版本检查。sleep:指定监控间隔时间,例如sleep10表示每隔10秒进行一次监控。 例如,以下命令分析名为slow。log的查询日志文件:直接分析慢查询文件:ptquerydigestvarlogmysqlslow。logslowreport。log分析最近1小时内的查询:ptquerydigestsince1hvarlogmysqlslow。logslowreport。log分析指含有select语句的慢查询:ptquerydigestfilterevent{fingerprint}mselectivarlogmysqlslow。logslowreport。log分析指定时间范围内的查询:ptquerydigestvarlogmysqlslow。logsince2022111412:30:00until2022111423:30:00slowreport。log 运行完,ptquerydigest工具将生成一个分析报告,其中包含有关查询的各种统计信息。常见的分析指标包括查询数量、查询类型、查询时间、查询响应时间、慢查询等。分析报告还将显示查询分布、高频查询、重复查询等信息。 以上面分析指定时间范围内的查询生成的report为例: TopSlowSQL 分析报告显示了慢查询的排名、查询ID、响应时间、调用次数等信息。 Query1SQL分析 还有每个TopslowSQL的详细信息! Query2SQL分析 有了它,我们就可以按照报告的慢SQL逐一优化了。