暂无图片
innodb_flush_log_at_trx_commit=0 存在的意义是什么?
我来答
分享
chengang
2021-09-24
innodb_flush_log_at_trx_commit=0 存在的意义是什么?

innodb_flush_log_at_trx_commit = 0
代表每次提交写入MySQL log buffer 然后再每秒刷到磁盘上
innodb_flush_log_at_trx_commit = 1
代表每次提交写入 os cache,然后再每秒刷到磁盘上

=0 是应用级保障,如果应用crash了则最多可能丢一秒
=1 是os级保障,如果OS crash了。则最多可能丟一秒

1、从mysql的缓存到os的缓存都是内存交换,应该很快。所以刷到OS cache也应该不会影响性能吧。
2、大概率我们生产环境,mysql也会独占服务器,或者说服务器上除了mysql一个重应用之外,不会再有重应用。 那么就不会存在 os忙其它事,处理不过来mysql请求的问题。

so…基于上述我的认知。那么innodb_flush_log_at_trx_commit=0 在哪些场景才用呢。而不能用 =2?

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
薛晓刚

总有极端。我也认为哪里那么巧正好断电?
我就遇到过一次,不是这个参数,而是sync_binlog。也是0 1 2这种。那个值写了16.结果就是binlog不全。奇葩吧。
理论如果没有极端问题,都不用写日志。但是就是每个事务都考虑的是极端问题,才有了日志。

暂无图片 评论
暂无图片 有用 0
暂无图片
chengang
题主
2021-09-24
为什么需要用到 = 0这种情况。我认为完全可以用 = 2 代替=0的情况。
chengang

=1写错了,是=2

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏