@llplmlyd
2020-12-14T14:17:53.000000Z
字数 580
阅读 660
数据库
mysql参数
重做日志包括 redo undo 日志
Innodb 通过force log at commit 机制实现失误的持久性
事务提交 必须先将事务的 所有日志写入到重做日志文件中 待事务commit 才算完成
每次进行 将重做日志缓冲写入重做日志中 都需要调用一次 fsync 调用磁盘io写入磁盘,
无开启o_direct选项 所以重做日志缓冲先写入 文件系统缓冲 再调用fsync 写入磁盘
而fsync的速度 取决于磁盘的性能,而数据库事务提交的性能也就取决于磁盘的性能。
为了提高数据库事务的写入性能 数据库中的 innodb_flush_log_at_trx_commit 可以控制数据库事务的刷盘策略
parameter | defination | security |
---|---|---|
0 | 事务提交时不进行写入重做日志的操作,操作仅在master thread中进行,而master thread中 每一秒会进行重做日志的刷盘 | mysql进程重启 事务丢失 不符合数据库的duration规则 |
1 | 事务提交时必须进行一次 fsync | 只要事务已经提交commit就不会丢失,持久保存 |
2 | 事务提交时候 写入重做日志,但仅写入文件系统缓存当中 不落盘 | mysql进程重启不丢失,操作系统重启 则丢失数据 |