2024.09.11 | cuithink | 626次围观
Log Buffer是存储要写入磁盘上的日志文件的数据的内存区域,日志缓冲区的大小由innodb_log_buffer_size变量决定的,默认是16M,日志缓冲区的内容定期刷新到磁盘。较大的日志缓冲区可以运行大型事务,而无需再事务提交之前将重做日志数据写入磁盘。因此,如果有更新、插入或者删除许多行的事务,则增加日志缓冲区的大小可以节省磁盘IO。
可以通过 innodb_flush_log_at_trx_commit参数来控制如何将日志缓冲区的内容写入并刷新到磁盘,默认是1
1、参数为 0 时,表示事务 commit 不立即把 redo log buffer 里的数据刷入磁盘文件的,而是依靠 InnoDB 的主线程每秒(此时间由参数 innodb_flush_log_at_timeout 控制,默认 1s)执行一次刷新到磁盘。此时可能你提交事务了,结果 mysql 宕机了,然后此时内存里的数据全部丢失。
2、 参数为 1 时,表示事务 commit 后立即把 redo log buffer 里的数据写入到 os buffer 中,并立即执行 fsync () 操作
3、 参数为 2 时,表示事务 commit 后立即把 redo log buffer 里的数据写入到 os buffer 中,但不立即 fsync () SQL 执行过程
粤ICP备16076548号
发表评论