sync_binlog和innodb_flush_log_at_trx_commit的区别

innodb_flush_log_at_trx_commi  这个指的是写redo及后续操作,ib_logfile这个文件的刷新方式。

sync_binlog纯粹指的是binlog ,如 mysql-bin0003等。

基于innodb_flush_log_at_trx_commit 的三个参数的解释。

sync_binlog和innodb_flush_log_at_trx_commit的区别_第1张图片

innodb_flush_log_at_trx_commit参数控制事务提交时写重做日志的行为方式,它有三个值:0、1和2。

(1)默认值为1,每次事务提交的时候都会将日志缓存中的数据写入到日志文件,同时还会触发文件系统到磁 盘的同步,如果发生系统崩溃,数据是零丢失,这种方式对数据是最安全的,但性能是最慢的,因为把数据从 缓存同步到磁盘的成本很高。这种方式适用于对数据安全性要求高的行业,如银行业。但很多互联网的应用, 对数据的安全性要求不太高,而对性能的要求很高,设置成0或2会更合适。

(2)设置成0时,事务提交的时候不会触发写日志文件的操作,日志缓存中的数据以每秒一次的频率写入到日 志文件中,同时还会进行文件系统到磁盘的同步操作。

(3)设置成2时,事务提交的时候会写日志文件,但文件系统到磁盘的同步是每秒进行一次。 0和2都是每秒进行一次文件系统到磁盘的同步,因此这两种方式的性能都差不多,当系统崩溃时,最多丢失1 秒的数据。但0和2还有细微的不同,当设置成2时,每次事务提交都写日志文件,因此数据已经从MySQL的日 志缓存刷新到了操作系统的文件缓存,如果只是MySQL崩溃,而操作系统没有崩溃,将不会丢失数据。因此0 和2比较起来,通常设置为2比较好。

性能最好的测试: 

  innodb_flush_log_at_trx_commit=2 

  sync_binlog=1000

innodb_flush_method :

sync_binlog和innodb_flush_log_at_trx_commit的区别_第2张图片

 

1. fsync:是默认值,使用fsync()系统调用刷新数据文件和日志文件,数据会在操作系统的缓存 中保存。

2. O_DSYNC:InnoDB使用O_SYNC打开和刷新日志文件,使用fsync()刷新数据文件。

3. O_DIRECT:使用O_DIRECT打开数据文件,使用fsync()系统调用刷新数据文件和日志文件, 数据不会在操作系统的缓存中保存。

4. O_DIRECT_NO_FSYNC:使用O_DIRECT刷新I/O,但写磁盘时不执行fsync()。

你可能感兴趣的:(mysql,mysql)