MySQL事务已提交,数据却丢了,赶紧检查下这个配置!!!(收藏)

(1)粉色,是InnoDB的一项很重要的内存结构(In-Memory Structure),日志缓冲区(Log Buffer),这一层,是MySQL应用程序用户态;
(2)屎黄色,是操作系统的缓冲区(OS cache),这一层,是OS内核态;
(3)蓝色,是落盘的日志文件;
redo log最终落盘的步骤如何?
(2)如果写入Log Buffer的数据,write入OS cache之前,数据库崩溃,就会出现数据丢失;


高并发业务,行业最佳实践,是使用第三种折衷配置(=2),这是因为:
总结
一、为了保证事务的ACID特性,理论上每次事务提交都应该刷盘,但此时效率很低,有两种优化方向:
(1)随机写优化为顺序写;
(2)每次写优化为批量写;
二、redo log是一种顺序写,它有三层架构:
(1)MySQL应用层:Log Buffer
(2)OS内核层:OS cache
(3)OS文件:log file
三、为了满足不同业务对于吞吐量与一致性的需求,MySQL事务提交时刷redo log有三种策略:
(1)0:每秒write一次OS cache,同时fsync刷磁盘,性能好;
(2)1:每次都write入OS cache,同时fsync刷磁盘,一致性好;
(3)2:每次都write入OS cache,每秒fsync刷磁盘,折衷;
四、高并发业务,行业内的最佳实践,是:
innodb_flush_log_at_trx_commit=2
知其然,知其所以然,希望大家有收获。
相关推荐:
贵司线上的配置是多少?丢过数据么?
评论