如何控制MySQL事务提交后,刷redo-log的策略?

栏目: IT技术 · 发布时间: 6年前

内容简介:既然涉及到事务提交,那么我们就是以MySQL有一个参数,能够控制事务提交时,刷redo log的策略。该参数为:

既然涉及到事务提交,那么我们就是以 InnoDB 来说明的。

MySQL有一个参数,能够控制事务提交时,刷redo log的策略。该参数为: innodb_flush_log_at_trx_commit

如何控制 <a href='https://www.codercto.com/topics/18746.html'>MySQL</a> 事务提交后,刷redo-log的策略?

  • 策略1, set global innodb_flush_log_at_trx_commit = 0

该方式可以获得最佳性能。

每隔1秒种,才将Log Buffer中的数据批量写入OS Cache,同时MySQL主动fsync。

这种策略,如果数据库崩溃,会有1秒的数据丢失。

  • 策略2, set global innodb_flush_log_at_trx_commit = 1

该方式可以获得强一致性。

每次事务提交,都将Log Buffer中数据写入到OS Cache,同时MySQL主动fsync。

这种策略是InnoDB默认配置,是为了保证事务ACID特性。

  • 策略3, set global innodb_flush_log_at_trx_commit = 2

该方式则是一种trade-off的结果。

每次事务提交,都将Log Buffer中的数据写入OS Cache;

每隔1秒,MySQL主动将OS Cache中数据批量fsync。

这种策略,如果操作系统崩溃,最多会有1秒的数据丢失。(磁盘IO次数是不确定的,因为OS的fsync的频率并不是MySQL能控制的;OS也会进行fsync,而MySQL主动fsync的周期是1秒,所以最多丢1秒数据)

那么,透漏个小秘密,高并发业务场景下,最佳实践会如何配置呢?

答案是 set global innodb_flush_log_at_trx_commit = 2 。因为不仅可以保证性能,也相对可以保障安全性(只要操作系统不出问题,数据就不会丢。而比起MySQL应用出问题,操作系统出问题概率小很多)

如何控制MySQL事务提交后,刷redo-log的策略? 一个正在技术专家成长道路上不断努力前进的程序员

(转载本站文章请注明作者和出处buildupchao)


以上所述就是小编给大家介绍的《如何控制MySQL事务提交后,刷redo-log的策略?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

技术元素

技术元素

[美] 凯文·凯利 / 张行舟、余倩、周峰、管策、金鑫、曾丹阳、李远、袁璐 / 译言·东西文库/电子工业出版社 / 2012-5 / 55.00元

我会将我不成熟的想法、笔记、内心争论、草稿以及对其他文章的回应都写在《技术元素》中,这样我就能知道自己到底在想些什么。——KK “技术元素”(technium)是凯文•凯利专门创造出来的词语。“技术元素不仅仅包括一些具象的技术(例如汽车、雷达和计算机等),它还包括文化、 法律、社会机构和所有的智能创造物。”简而言之,技术元素就是从人的意识中涌现出来的一切。KK把这种科技的延伸面看成一个能产生......一起来看看 《技术元素》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具