共计 960 个字符,预计需要花费 3 分钟才能阅读完成。
怎样理解 innodb_flush_log_at_trx_commit 参数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
当这个参数被设置为 0,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。当这个值为 1(默认值)之时,在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的 刷新。
当设置为 2 之时,在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新。MySQL 在对日志文件的刷新每秒发生一次。我们必须注意到,因为进程安排问题,每秒一次的刷新不是 100% 保证每秒都发生。你可以通过设置这个值不为 1 来获得较好的性能,
但随之你会在一次崩溃中损失二分之一价值的事务。如果你设置这个值为 0,那么任何 mysqld 进程的崩溃会删除崩溃前最后一秒的事务,如果我们设置这个值为 2,那么只有操作系统崩溃或掉电才会删除最后一秒的事务。
尽管如此,InnoDB 的崩溃恢复不受影响,而且因为这样崩溃恢复开始作用而不考虑这个值。注意,许多操作系统和一些磁盘硬件会欺骗刷新到磁盘操作。尽管刷新没有进行,你可以告诉 mysqld 刷新已经进行。
即使设置这个值为 1,事务的持久程度不被保证,且在最坏情况下掉电甚至会破坏 InnoDB 数据库。在 SCSI 磁盘控制器中,或在磁盘自身中,使用有后备电池的磁盘缓存会加速文件 刷新并且使得操作更安全。你也可以试着使用 Unix 命令 hdparm 来在硬件缓存中禁止磁盘写缓存,
或使用其它一些对硬件提供商专用的命令。这个选项的 默认值是 1。
该参数简单归纳如下:
参数 innodb_flush_log_at_trx_commit:
=0:每秒 write os cache flush disk
=1:每次 commit 都 write os cache flush disk
=2:每次 commit 都 write os cache,然后根据 innodb_flush_log_at_timeout 参数(默认为 1s)flush disk
看完上述内容,你们掌握怎样理解 innodb_flush_log_at_trx_commit 参数的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!