mysql安装完成后如何开启慢查询日志_mysql性能监控配置

来源:这里教程网 时间:2026-02-28 20:49:54 作者:

怎么确认慢查询日志当前没开?

安装完 MySQL 默认是关闭慢查询日志的,

slow_query_log
值为
OFF
。别猜,直接连上 MySQL 执行:
SHOW VARIABLES LIKE 'slow_query_log';

如果返回
Value
OFF
,那就得手动开;顺手再查下阈值:
SHOW VARIABLES LIKE 'long_query_time';
,默认是 10 秒——对现代业务来说太宽松了,基本等于没开。

临时开启:快速验证是否生效

适合刚装好想立刻测试,或临时排查问题。执行三条命令即可:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
(建议先设成 1 秒,比默认 10 秒更敏感)
SET GLOBAL log_queries_not_using_indexes = 'ON';
(可选但强烈推荐,能抓到“没走索引”的隐患 SQL)

注意:

SET GLOBAL
只影响新建立的连接,已存在的连接不会自动继承;且服务重启后全部失效。验证是否写入日志,可执行:
SELECT SLEEP(2);
,然后去日志文件里搜这句——别只看命令回显,要看日志落盘才算真生效。

永久开启:改配置文件 + 重启服务

Windows 下找

my.ini
,Linux/macOS 下找
/etc/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
,在
[mysqld]
段落下加这几行:

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
log_output = FILE

关键点:

log_output
必须显式设为
FILE
,否则即使开了日志,也可能默默写进表(
mysql.slow_log
),而你根本不知道它在哪;
slow_query_log_file
路径要确保 MySQL 进程有写权限,尤其 Linux 上常因权限不足导致日志“静默失败”;
改完必须重启 MySQL 服务,Windows 用
net stop mysql && net start mysql
,Linux 用
systemctl restart mysqld

日志怎么看?别用手翻

日志文件本身是纯文本,但直接打开看效率极低。优先用 MySQL 自带工具:

mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

这条命令按总耗时(
-s t
)倒序,取前 10 条最慢的 SQL。常见坑:

日志里可能包含大量
SELECT SLEEP(...)
测试语句,干扰判断,上线前记得关掉测试配置;
如果看到大量
Rows_examined
极高、但
Rows_sent
很小的 SQL,基本就是缺索引或写了
SELECT *
+
WHERE
条件不匹配索引;
log_queries_not_using_indexes
开启后,会记录所有未走索引的查询——哪怕它本身很快,也得检查,因为数据量一涨就崩。

真正难的不是开日志,而是从日志里区分“偶发抖动”和“结构性瓶颈”。比如一条 SQL 平均 800ms,但 P95 是 3s,那大概率是锁竞争或大结果集排序,不是简单加个索引能解决的。

相关推荐