MYSQL慢日志

MySQL的慢查询日志(Slow Query Log)可以帮助数据库管理员识别执行时间较长的SQL语句。通过分析这些慢查询,可以发现性能瓶颈并采取相应的优化措施。

启用慢查询日志,需要在MySQL配置文件(通常是my.cnfmy.ini)中设置相关参数,或者直接在运行时使用SET命令来修改。

复制代码
mysql> show variables like '%slow_query_log%';
+---------------------+-----------------------------------------+
| Variable_name       | Value                                   |
+---------------------+-----------------------------------------+
| slow_query_log      | OFF                                     |
| slow_query_log_file | D:\develop\...\LAPTOP-3JODIVUS-slow.log |
+---------------------+-----------------------------------------+
2 rows in set, 1 warning (0.02 sec)

mysql> show variables like '%long_query%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set, 1 warning (0.00 sec)

配置文件设置

复制代码
[mysqld]
slow_query_log = 1  # 开启慢查询日志
slow_query_log_file = /path/to/your/slow-query.log  # 指定日志文件路径
long_query_time = 2  # 设置阈值,默认单位是秒
log_queries_not_using_indexes = 1  # 记录没有使用索引的查询
  • slow_query_log:开启慢查询日志功能。
  • slow_query_log_file:指定慢查询日志文件的存储位置。
  • long_query_time:定义了查询需要多长时间才被记录到慢查询日志中。默认单位是秒,也可以设置为毫秒。
  • log_queries_not_using_indexes:如果设置为1,那么所有不使用索引的查询都将被记录,无论它们是否超过了long_query_time

运行时设置

在 MySQL 服务器运行时通过 SQL 命令临时更改设置

复制代码
# 全局开启
SET GLOBAL slow_query_log = 'ON';
# 指定路径和名称
SET GLOBAL slow_query_log_file = 'D:\\slow-query-log.log';
# 调整时间阈值
SET GLOBAL long_query_time = 3;
# 记录未使用索引的查询
SET GLOBAL log_queries_not_using_indexes = 'ON';

查看和分析慢查询日志

一旦开启了慢查询日志,并且有一些慢查询被记录下来后,可以使用文本编辑器打开日志文件查看内容。通常会使用一些专门的工具来分析这些日志,例如mysqldumpslowpt-query-digest(Percona Toolkit的一部分)等。

  • mysqldumpslow:MySQL 自带的简单工具,可以用来汇总慢查询日志中的数据。
  • pt-query-digest:更强大的工具,可以从慢查询日志中提取出详细的统计信息,并生成报告。

相关命令:

复制代码
//查看慢查询日志是否开启
SHOW VARIABLES LIKE '%slow_query_log%';
//查看时间阈值:
SHOW VARIABLES LIKE 'long_query_time%';
相关推荐
Hoffer_3 小时前
MySQL 强制索引:USE/FORCE INDEX 用法与避坑
后端·mysql
Hoffer_3 小时前
MySQL 索引核心操作:CREATE/DROP/SHOW
后端·mysql
0xDevNull2 天前
MySQL索引进阶用法
后端·mysql
0xDevNull2 天前
MySQL索引用法
mysql
程序员小崔日记2 天前
一篇文章彻底搞懂 MySQL 和 Redis:原理、区别、项目用法全解析(建议收藏)
redis·mysql·项目实战
武子康2 天前
大数据-241 离线数仓 - 实战:电商核心交易数据模型与 MySQL 源表设计(订单/商品/品类/店铺/支付)
大数据·后端·mysql
用户8307196840823 天前
MySQL 查询优化 30 条封神技巧:用好索引,少耗资源,查询快到飞起
mysql
Nyarlathotep01133 天前
事务隔离级别
sql·mysql
Nyarlathotep01133 天前
SQL的事务控制
sql·mysql
用户86178277365183 天前
MySQL 8.0从库宕机排查实录:中继日志膨胀引发的连锁故障复盘
mysql