MySQL 8.0下如何将慢查询日志输出到表中以及有什么性能影响?

阿晨姑娘_6972

阿晨姑娘_6972

2026-08-10

829人浏览

原创

要启用 slow_log 表,需同时设置 set global slow_query_log = on 和 set global log_output = 'table';验证方式为查询 select @@slow_query_log, @@log_output 和 select count(*) from mysql.slow_log。

mysql 8.0下如何将慢查询日志输出到表中以及有什么性能影响?

如何启用 slow_log 表并确认是否生效

MySQL 8.0 默认把慢查询日志写入文件,要改到表里,必须开启 slow_query_log 并把 log_output 设为 'TABLE'(不是 'FILE' 或 'FILE,TABLE')。注意:仅设 slow_query_log = ON 不够,log_output 必须显式指定。

执行以下命令:

SET GLOBAL slow_query_log = ON;
SET GLOBAL log_output = 'TABLE';

验证是否生效:

查 mysql.slow_log 表是否存在且有数据:SELECT COUNT(*) FROM mysql.slow_log;;再查全局变量:SELECT @@slow_query_log, @@log_output;。如果 @@log_output 返回 'TABLE',说明已切换成功。

常见错误现象:

  • mysql.slow_log 表为空,但 slow_query_log 显示 ON → 很可能 log_output 还是 'FILE',或未触发慢查询(long_query_time 默认 10 秒,可临时调低测试)
  • 报错 Table 'mysql.slow_log' doesn't exist → MySQL 8.0 默认已建该表,但若曾手动删过,需用 mysql_upgrade 或重建:CREATE TABLE IF NOT EXISTS mysql.slow_log (...)(不建议手写,应从官方 SQL 模板恢复)

为什么不能同时用 FILE 和 TABLE 输出

MySQL 8.0 不支持 log_output = 'FILE,TABLE' 这种逗号分隔写法——它会静默降级为只写 FILE,mysql.slow_log 不会记录任何内容。这是文档明确说明的限制,不是 bug。

如果你既想保留文件归档又想查表分析,只能二选一,然后靠外部工具同步(比如用 pt-query-digest 解析文件后导入自定义分析表),或者用 MySQL Router / 应用层双写日志。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载

关键点:

  • log_output 是枚举值,合法值只有 'FILE'、'TABLE'、'NONE',其他字符串会被忽略
  • 修改后无需重启,但新连接才生效;已有连接的会话级日志行为不受影响
  • 表输出路径不可配置——固定在 mysql.slow_log,且该表引擎为 CSV(8.0.23+ 支持 JSON 格式但仍是 CSV 引擎存储)

写入 slow_log 表的真实性能开销在哪

写表比写文件慢,但实际影响取决于慢查询频率和并发量,不是“一开就卡”。主要瓶颈来自三处:

  • 每次慢查询结束时,MySQL 要构造一条 INSERT 语句并提交到 mysql.slow_log —— 即使该表是 CSV 引擎,仍走事务路径,受 innodb_flush_log_at_trx_commit 影响(默认 1,强制刷盘)
  • mysql.slow_log 表没有主键/索引,大量 INSERT 会造成表锁(CSV 引擎本质是表级锁),高并发慢查询下可能堆积
  • 日志字段如 sql_text 是 TEXT 类型,若查询超长(比如带大 JSON 或嵌套子查询),写入成本显著上升

实测建议:

若每秒慢查询超过 5–10 次,建议监控 SHOW STATUS LIKE 'Slow_queries'; 和 Threads_running 是否异常升高;必要时可临时关闭 slow_query_log,或改用 performance_schema.events_statements_summary_by_digest 做轻量采样分析。

查 slow_log 表时容易被忽略的细节

直接 SELECT * FROM mysql.slow_log 看起来方便,但有三个硬伤:

  • start_time 字段精度只有秒级(不是微秒),无法区分同一秒内多个慢查询
  • sql_text 默认被截断(max_length 默认 1024 字符),超长部分丢失,查不到完整语句 —— 可通过调整 log_slow_extra(8.0.26+)和 log_slow_verbosity 提升信息量,但不会延长 sql_text 字段长度
  • mysql.slow_log 不自动清理,表会无限增长,必须手动 TRUNCATE TABLE mysql.slow_log 或按时间分区归档(需自行建视图或脚本)

真正要用它定位问题,得配合 WHERE start_time > DATE_SUB(NOW(), INTERVAL 1 HOUR) 加时间过滤,并留意 query_time 和 lock_time 的差值判断是否真卡在锁上。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

mysql mysql 8.0 mysql错误

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2193

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1339

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

775

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

2992

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

5048

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1139

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

5311

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

4662

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

6154

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 183人学习