MySQL慢查询分析与处理

什么是慢日志

    慢日志是MySQL用来记录数据库中执行较慢的SQL语句的日志,当数据库遇到性能问题时,慢日志可以帮助我们分析数据库中执行较慢的SQL。

如何打开数据库慢日志功能

    MySQL默认是关闭慢日志功能的,可以从数据库中或者从配置文件中进行修改。

    在数据库中临时开启:

    set global slow_query_log = 'on'; //开启慢查询日志

    set global slow_query_log_file = 'path/mysql_xx_slow.log';//设置慢日志路径

    set global long_query_time = 2;//设置慢查询阈值,单位秒,超过阈值的SQL会记录到慢日志

    配置文件(my.cnf)中永久开启:

    slow_query_log = 1

    slow_query_log_file = path/mysql_xx_slow.log

    long_query_time = 2

    log_queries_not_using_indexes = 1 -- 可选项:记录那些没有使用索引的查询

慢日志内容格式

# Time: 2023-10-12T09:14:23.563457Z
# User@Host: user[user] @ localhost []
# Query_time: 12.345678  Lock_time: 0.000123 Rows_sent: 10  Rows_examined: 1000
# Rows_affected: 0  Bytes_sent: 512
SET timestamp=1634038463;
SELECT * FROM large_table WHERE column = 'value';

  • Time:查询的执行时间。
  • User@Host:发起查询的用户和主机。
  • Query_time:查询执行的时间,单位为秒。
  • Lock_time:查询执行期间的锁定时间。
  • Rows_sent:查询返回的行数。
  • Rows_examined:查询过程中检查的行数。
  • Rows_affected:影响的行数(如 INSERTUPDATEDELETE 等)。
  • Bytes_sent:返回的数据大小(以字节为单位)。
  • SET timestamp:查询执行的时间戳。
  • SQL 语句:执行的具体 SQL 查询。

如何快速分析很大的慢日志

    使用PerconaToolkit中的pt-query-digest开源工具可以帮助我们快速分析MySQL的慢查询日志。

    有两种方式可以安装pt-query-digest,一种方式是从官网下载percona-toolkit工具包安装,一种方式是直接导入pt-query-digest工具使用。两种方式都需要提前安装perl工具包。

    yum install -y perl-CPAN perl-Time-HiRes

    从官网(Software Downloads - Percona)下载工具包

    yum localinstall -y percona-toolkit-3.2.0-1.el7.x86_64.rpm

    安装成功后输入pt-然后tab键,会提示很多pt工具

    确定慢查询日志位置

    输入如下命令查询2025-0218 15:00:00到2025-0218 16:00:00之间的慢SQL:

    pt-query-digest --since '2025-0218 15:00:00' --until '2025-0218 16:00:00' /data/mysql_log/mysql-slow-3306.log> /tmp/mysql_slow.log

    我这里的慢日志比较小,可以直接使用工具查找,如果慢日志比较大的,建议先用tail命令导出包含查询时间段的慢sql的日志到指定目录,再使用pt-query-digest工具排查,更有效率。

    

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值