内容简介:既然涉及到事务提交,那么我们就是以MySQL有一个参数,能够控制事务提交时,刷redo log的策略。该参数为:
既然涉及到事务提交,那么我们就是以 InnoDB
来说明的。
MySQL有一个参数,能够控制事务提交时,刷redo log的策略。该参数为: innodb_flush_log_at_trx_commit
。
- 策略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应用出问题,操作系统出问题概率小很多)
一个正在技术专家成长道路上不断努力前进的程序员
(转载本站文章请注明作者和出处buildupchao)
以上所述就是小编给大家介绍的《如何控制MySQL事务提交后,刷redo-log的策略?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 如何控制 MySQL 事务提交后,刷 redo-log 的策略?
- Git提交错误时如何删除Git提交记录
- 分布式系统 - 两段式提交(2PC)和三段式提交(3PC)
- 减半前,比特币开发者代码提交数创历史新高:4月累计提交510次
- 提交任务到Spark
- [译] Commit 提交指南
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java多线程编程实战指南(设计模式篇)
黄文海 / 电子工业出版社 / 2015-10 / 59.00
随着CPU 多核时代的到来,多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。而 解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案。然而,多线程编程相关的设计模式书籍多采用C++作为描述语言,且书中所举的例子多与应用开发人员的实际工作相去甚远。《Java多线程编程实战指南(设计模式篇)》采用Java(JDK1.6)语言和UML 为描述语言,并结合作者多......一起来看看 《Java多线程编程实战指南(设计模式篇)》 这本书的介绍吧!