mysql日志记录开销_InnoDB重做日志对性能的影响

千辰大大_1863

千辰大大_1863

2026-03-26

598人浏览

原创

会,开启 general_log 会明显拖慢 mysql——因其同步刷盘每条语句,高并发下极易压垮磁盘 i/o;生产环境应禁用,排查时可临时设 log_output='table' 并速开速关。

mysql日志记录开销_innodb重做日志对性能的影响

开启 general_log 会让 MySQL 变慢吗?

会,而且可能非常明显——但不是因为日志本身“慢”,而是它把所有语句无差别刷盘,直接压垮磁盘 I/O。通用查询日志(general_log)默认关闭,就是因为它在高并发下极易成为瓶颈。

  • general_log 记录的是客户端发来的每一条命令(包括 SELECT、USE、PING),不管是否执行成功
  • 日志写入模式默认是同步的(log_output = 'FILE' + 系统级 fsync),每条语句都触发一次磁盘写
  • 在 1000 QPS 的 OLTP 场景下,可能额外增加 20%~40% 的平均延迟,iotop 能明显看到 mysqld 进程持续刷盘

不建议在生产环境打开;临时排查连接/协议问题时,可改用 log_output = 'TABLE'(写入 mysql.general_log 表),再配合 SET GLOBAL general_log = 1 短期开启,用完立刻关掉。

binlog 开启反而提升 TPS?这合理吗?

合理,而且有实测支撑。在某些高并发锁竞争场景下,开 binlog 反而让整体吞吐更高——这不是玄学,是 InnoDB 提交路径被“拉长”后,意外缓解了热点锁争抢。

  • 关闭 binlog 时,事务提交更快,导致更多线程挤在 trx_sys->mutex 或 lock_sys->mutex 上排队
  • 开启 binlog(尤其 sync_binlog = 1)后,提交流程变长,线程天然错峰,锁冲突下降
  • 实测中,sysbench oltp_update_index 场景下,开 binlog 的 TPS 比关闭时高 15%~30%,CPU 峰值反而更低

注意:这个现象只在特定负载(如中高并发、索引更新密集)下显著;低并发或纯读场景下,开 binlog 仍是净开销。别把它当成性能调优手段,而是理解“日志不是单纯累加成本”。

innodb_redo_log_capacity 太小会卡住写入?

会,而且卡得毫无征兆。InnoDB 重做日志(redo log)不是“越大越好”,但太小会导致频繁 checkpoint 和写入阻塞,尤其在批量导入或大事务场景。

MySQL
MySQL

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

下载
  • innodb_redo_log_capacity(MySQL 8.0.30+)替代了旧版的 innodb_log_file_size + innodb_log_files_in_group 组合
  • 如果设得太小(比如仅 64MB),当 redo log 空间快满时,InnoDB 会强制触发 sharp checkpoint,暂停用户线程等待刷脏页
  • 表现为:SHOW ENGINE INNODB STATUS 中 LOG 部分显示 Log sequence number 接近 Log flushed up to,同时 Queries_sec 断崖下跌

建议值:

  • OLTP 小事务为主 → 256MB~1GB
  • 批量写入/ETL 场景 → ≥2GB,并观察 Innodb_redo_log_waits 状态变量是否持续非零

slow_query_log 对性能真没影响?那为什么有人一开就卡?

官方说“开销可忽略”,是指单次判断和写入动作本身很轻;但卡住的真实原因是配置不当,尤其是 long_query_time 设得太低,或日志输出目标不可靠。

  • long_query_time = 0 会让所有查询都进慢日志,等效于开了 general_log,I/O 压力陡增
  • log_output = 'FILE' 且日志落在机械盘或 NFS 上,写入延迟会拖慢整个语句执行(哪怕只是记录一行)
  • 更隐蔽的问题:slow_query_log_use_global_control = ON(MySQL 8.0.23+)未启用时,每个会话可独立开关慢日志,但若大量会话都设了 long_query_time = 0.1,叠加效应就出来了

稳妥做法:

  • 生产环境设 long_query_time = 0.2 或 0.5,避免毛刺干扰
  • 用 log_output = 'TABLE',再定期导出分析,避开实时 I/O
  • 检查 Slow_queries 状态变量增速,异常飙升时立刻查配置

redo log 和 binlog 是数据库可靠性的基石,但它们不是“隐身”的——每一字节落地都有代价。最容易被忽略的,其实是日志路径的存储介质和权限配置:比如把 datadir 和 log_bin 放在同一块 SATA 盘上,或者 general_log_file 被 SELinux 拦截导致写入失败却静默降级,这些细节比参数值更能决定线上表现。

相关文章

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

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

下载

相关标签:

mysql

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

相关专题

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

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

2023.06.20

2153

6

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

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

2023.06.21

1319

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

2932

5

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

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

2023.07.25

4928

4

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

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

2023.08.08

1119

3

sqlserver和mysql区别
sqlserver和mysql区别

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

2023.08.11

5191

4

mysql忘记密码
mysql忘记密码

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

2023.08.14

4582

7

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

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

2023.08.16

6034

11

热门下载

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

精品课程

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

共1课时 | 183人学习