为什么需要关注慢查询
数据库往往是系统性能的瓶颈所在。在 MySQL 中,执行缓慢的 SQL 语句可能是导致响应延迟的主要原因。这些语句通常源于不合理的索引设计、复杂的关联查询或数据量激增。及时捕获并分析这些'慢查询',是优化数据库性能的关键第一步。
开启慢查询日志
有两种方式可以启用慢查询日志:动态配置和修改配置文件。
1. 动态配置(即时生效)
通过命令行可以直接调整参数。注意 GLOBAL 变量需要在会话外设置。
-- 查看当前慢查询阈值,默认通常为 10 秒
SHOW VARIABLES LIKE 'long_query_time';
-- 设置为 2 秒,超过此时间的查询将被记录
SET GLOBAL long_query_time = 2;
-- 确认慢查询日志是否开启
SHOW VARIABLES LIKE '%slow%';
如果直接执行 SET slow_query_log='ON' 报错提示是全局变量,请加上 GLOBAL 关键字:
SET GLOBAL slow_query_log = 'ON';
再次检查变量状态,确保 slow_query_log 显示为 ON。
2. 配置文件持久化
为了重启后依然生效,建议修改 my.cnf 配置文件。在 [mysqld] 部分添加以下内容:
[mysqld]
long_query_time = 2
log-slow-queries = /usr/local/mysql/mysql-slow.log
修改完成后重启服务即可:
/usr/local/mysql/libexec/mysqld restart
日志分析与工具使用
慢查询日志记录了 SQL 的执行情况,包括执行时间、锁定时间、扫描行数等关键指标。虽然可以编写 Shell 脚本自行解析,但 MySQL 自带的 mysqldumpslow 工具更为便捷。
日志格式示例
打开日志文件可以看到类似如下内容:
# Time: 100814 13:28:30
# : root[root] @ localhost []
# Query_time: Lock_time: Rows_sent: Rows_examined:
;
( ad_code) x ad_visit_history ad_code ( ad_code ad_list media_id);

