innodb_flush_method&innodb_flush_log_at_trx_commit

1、innodb_flush_log_at_trx_commit

Innodb_flush_log_at_trx_commit控制何时刷磁盘,而innodb_flush_method控制如何刷。

innodb_flush_log_at_trx_commit 参数解释:

0(延迟写): log_buff  --每隔1秒-->log_file  —实时—> disk

1(实时写,实时刷):log_buff  —实时—>  log_file —实时—> disk

2(实时写,延迟刷):log_buff  —实时—> log_file --每隔1秒--> disk

注意:

  由于进程调度策略问题,这个“每秒执行一次flush(刷到磁盘)操作”并不是保证100%的“每秒”。

另外,更新一下innodb_flush_log_at_trx_commit=2时在5.6的变化:

< 5.6.6: 每隔一秒将redo log buffer中的数据刷新到磁盘

>= 5.6.6:每隔innodb_flush_log_at_timeout秒将数据刷新到磁盘中去。默认值是1.

 

0:mysql或操作系统崩溃、断电可能引起数据丢失;

2:操作系统崩溃、断电可能引起数据丢失。

 

2、innodb_flush_method

2.1VFS

该层的缓冲都放在主机内存中,它的目的主要是在操作系统层缓冲数据,避免慢速块设备读写操作影响了IO的响应时间。

 innodb_flush_method&innodb_flush_log_at_trx_commit_第1张图片

你可能感兴趣的:(MySQL源码分析)