binlog写入机制
问题写入磁盘慢 用binlog cache加速写入
binlog 的写入逻辑比较简单:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中
sync_binlog 说明
binlog cache =>write 写入=>系统pagecache落盘由操作系统决定
binlog cache =>fsync写入=>落盘
write,指的就是指把日志写入到文件系统的 page cache,并没有把数据持久化到磁盘,所以速度比较快。
fsync,才是将数据持久化到磁盘的操作。一般情况下,我们认为 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。
总结
sync_binlog 可容忍crash丢失0 一般500 1000
innodb_flush_log_at_trx_commit
redolog刷盘
0 表示 redolog cache每秒周期写入日志并强制刷盘
1 每次事务提交写入日志并强制刷盘
2 每次事务提交写入文件系统redolog 但是不会进行flush 磁盘
总结
0 有秒内丢失
1 每次刷盘性能不高
2 linux crash 丢失
