MySQL 参数故事: innodb_flush_log_at_trx_commit

字号+ 编辑: 国内TP粉 修订: 种花家 来源: 淘宝MySQL月报 2023-09-07 我要说两句(0)

MySQL配置文件里innodb_flush_log_at_trx_commit配置项目的详解

背景

innodb_flush_log_at_trx_commit 这个参数可以说是InnoDB里面最重要的参数之一,它控制了重做日志(redo log)的写盘和落盘策略。 具体的参数意义见手册

简单说来,可选值的安全性从0->2->1递增,分别对应于mysqld 进程crash可能丢失 -> OS crash可能丢失 -> 事务安全。

以上是路人皆知的故事,并且似乎板上钉钉,无可八卦。

innodb_use_global_flush_log_at_trx_commit

直到2010年的某一天,Percona的CTO Vadim同学觉得这种一刀切的风格不够灵活,最好把这个变量设置成session级别,每个session自己控制。

但同时为了保持Super权限对提交行为的控制,同时增加了innodb_use_global_flush_log_at_trx_commit参数。 这两个参数的配合逻辑为:

1、若innodb_use_global_flush_log_at_trx_commit为OFF,则使用session.innodb_flush_log_at_trx_commit;

2、若innodb_use_global_flush_log_at_trx_commit为ON,则使用global .innodb_flush_log_at_trx_commit(此时session中仍能设置,但无效)

3、每个session新建时,以当前的global.innodb_flush_log_at_trx_commit 为默认值。


业务应用

这个特性可以用在一些对表的重要性做等级定义的场景。比如同一个实例下,某些表数据有外部数据备份,或允许丢失部分事务的情况,对这些表的更新,可以设置 Session.innodb_flush_log_at_trx_commit为非1值。


在阿里云RDS服务中,我们对数据可靠性和可用性要求更高,将 innodb_use_global_flush_log_at_trx_commit设置为ON,因此修改session.innodb_flush_log_at_trx_commit也没有作用,统一使用 global.innodb_flush_log_at_trx_commit = 1。


阅完此文,您的感想如何?
  • 有用

    0

  • 没用

    0

  • 开心

    0

  • 愤怒

    0

  • 可怜

    0

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.交流群: PHP+JS聊天群

相关课文
  • 让Mysql查询后直接返回json字符串的方法

  • postgresql的pg_dump备份简单方法

  • 使用sql语句在MySQL库中去掉字段左边、右边指定字符串

  • 避免mysql全表扫描等影响性能的写法规则

我要说说
网上宾友点评