1. MySQL慢查询日志概述
慢查询日志是MySQL数据库内置的一项诊断功能,它会自动记录执行时间超过指定阈值的SQL语句。这个功能就像数据库的"黑匣子",当系统出现性能问题时,慢查询日志往往能提供最直接的线索。
在实际生产环境中,我遇到过多次因为一条未被发现的慢查询拖垮整个数据库的案例。有一次,某电商平台在促销活动期间突然出现大面积超时,最后发现是一条没有索引的订单统计SQL在作祟,这条语句在测试环境执行仅需0.5秒,但在生产环境的千万级数据上却要执行28秒。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 慢查询日志核心配置
2.1 基础参数设置
在MySQL配置文件(my.cnf或my.ini)中,这几个参数控制着慢查询日志的行为:
ini复制slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
min_examined_row_limit = 100
重要提示:开启log_queries_not_using_indexes要谨慎,在高并发环境下可能产生大量日志
2.2 动态调整参数
对于不能重启的生产环境,可以通过SQL命令实时调整:
sql复制SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 0.5;
SET GLOBAL log_queries_not_using_indexes = 'OFF';
我通常建议将long_query_time初始设置为1秒,然后根据实际负载情况逐步调整。对于OLTP系统,超过500ms的查询就值得关注;而对于报表系统,可能需要放宽到2-3秒。
3. 慢查询日志分析实战
3.1 原始日志解读
一条典型的慢查询日志记录如下:
log复制# Time: 2023-07-15T08:45:12.123456Z
# User@Host: app_user[app_user] @ [192.168.1.100] Id: 123456
# Query_time: 3.002156 Lock_time
