一、binlog的写入机制

图1:binlog的写入过程
事务的执行过程是先把日志存入binglog cache,存入的大小可以由参数binlog_cache_size 控制,如果缓存不够大,会暂存到磁盘中,事务提交的时候,执行器会把日志存入binlog中,并清空binglog cache。
执行write操作的时候速度比较快,这时binlog并没有进行持久化,只有执行了fsync操作后才会执行(这个时候才会占用磁盘的IOPS)。
1.write 和 fsync 的时机怎么控制
由sync_binlog控制:
1.当sync_binlog = 0 时,只执行write操作,不执行fsync操作
2.当sync_binglog = 1时,每个线程执行完write都要执行fsync操作
3.当sync_binglog = N(N>1),执行完N个write操作后执行一次fsync.
通常业务中会选择3,N在100-1000之间,但是值得注意的是,如果数据库宕机,可能会造成N个事务的日志丢失。