redo log 的什么时候刷盘

提问者:帅平 问题分类:面试刷题
redo log 的什么时候刷盘
1 个回答
原来无话可说
原来无话可说
InnoDB 存储引擎为 redo log 的刷盘策略提供了 innodb_flush_log_at_trx_commit 参数,它支持三种策略:
设置为0的时候,表示每次事务提交时不进行刷盘操作,只是保留在 redo log buffer中,mysql 崩溃会丢失1s的数据;
设置为1的时候,表示每次事务提交时都将进行刷盘操作(默认值),持久化到磁盘;
设置为2的时候,表示每次事务提交时都只把redo log buffer内容写入page cache,OS宕机会丢失1s的数据,因为未进行持久化;

innodb_flush_log_at_trx_commit 参数默认为 1 ,也就是说当事务提交时会调用 fsync(同步操作) 对 redo log 进行刷盘。
另外 InnoDB 存储引擎有一个后台线程,每隔1秒,就会把 redo log buffer 中的内容写到文件系统缓存(page cache),然后调用 fsync 刷盘。
redo log buffer占用的空间即将达到 innodb_log_buffer_size 一半的时候,后台线程会主动刷盘。
发布于:5个月前 (03-08) IP属地:未知
我来回答