暂无图片
sync_binlog 参数
我来答
分享
地平线
2022-02-11
sync_binlog 参数
暂无图片 5M

innodb_flush_log_at_trx_commit  和 sync_binlog  这两个参数有啥区别?


设置sync_binlog=1 和innodb_flush_log_at_trx_commit =1 ,不都是事务提交后,把日志写到磁盘上吗?

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新

第一个是 INNODB 刷新日志的方式 类似于ORACLE REDO LGWR行为控制.
第二个是 同步BINLOG方式

MYSQL和ORACLE 都不是事务提交后,把日志写到磁盘上的.

日志是记录数据变动,那怕事务还没有提交,还没有结束都要登记在日志里. 比如说 你某分某秒做了什么,至于你做完了,做的怎么样,还是中途而废都不关它的事.
日志只记录你的过程,不记录你的结果.类似时间样,只记录你干了什么.

所以这个时候 记录那么多,内存空间总是会满的,而且满得贼快.那么就要把内存的日志保存在磁盘上的REDO日志文件里.
ORACLE 是 满了1/3,每个3秒,DBWR开始写的激发条件.

MYSQL 的日志多了一层系统缓存,当MYSQL写日志的时候,一般先写到系统缓存里,然后由OS FLUSH操作去写日志文件.

为了避免系统缓存丢失日志的安全隐患,
innodb_flush_log_at_trx_commit 在事务提交时就刷人文件里面,就是写入文件这个动作之后立马调用系统去写文件.
sync_binlog=1 也表示不要经过系统缓存.

暂无图片 评论
暂无图片 有用 0
暂无图片
地平线

感谢 , 

innodb_flush_log_at_trx_commit 是控制 写redo log的,

 sync_binlog  是控制写binlog 文件的。


暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏