MySQL 的 binlog 和 redo log 写入原理

binlog 的写入流程

事务执行过程中,binlog 首先会被写到 binlog cache 中;事务提交的时候,再讲binlog cache 写到 binlog 文件中。一个事务的 binlog 是原子的,无论多大都需要保证完整性。

系统为每个客户端线程分配一个 binlog cache,其大小由 binlog_cache_size 控制。如果binlog cache 超过阀值,就会临时持久化到磁盘。当事务提交的时候,再将 binlog cache 中完整的事务持久化到磁盘中,并清空 binlog cache。

在这里插入图片描述

从上面可以看出,每个客户端线程都有自己独立的 binlog cache,但是会共享一份 binlog files。

上面的 write 是指把binlog cache 写到文件系统的 page cache,并没有写入到磁盘中,因此速度较快。

fsync 是实际的写盘操作,占用磁盘的 IOPS。

write 和 fsync 的写入时机,是由sync_binlog 控制的:

  1. sync_binlog=0:每次事务提交都只 write,不 fsync;
  2. sync_binlog=1:每次事务提交都会fsync;
  3. sync_binlog=N(N>1):每次提交事务都会 write,累计N 个后再执行 fsync。<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值