• 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 的三个参数的解释。

    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

    sync_binlog:

    该参数控制着二进制日志写入磁盘的过程。

    该参数的有效值为0 、1、N:

    0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync()),此时只是写入了操作系统缓冲,若操作系统宕机则会丢失部分二进制日志。

    1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。

    N:每写N次操作系统缓冲就执行一次刷新操作。

    将这个参数设为1以上的数值会提高数据库的性能,但同时会伴随数据丢失的风险。
    二进制日志文件涉及到数据的恢复,以及想在主从之间获得最大的一致性,那么应该将该参数设置为1,但同时也会造成一定的性能损耗。

    innodb_flush_method :

    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()。

  • 相关阅读:
    【Web开发】C++实现Web服务器(libevent,libcurl)
    apicloud影视解析APP源码 HTML
    如何创建自己的小程序?
    爱上C语言:操作符详解(上)
    offsetWidth / offsetHeight等
    柔性数组 +结构体中数组名与指针的区别
    Java 虚拟机:Java 内存区域及对象,java 反射面试
    高并发服务优化篇:详解一次由读写锁引起的内存泄漏
    使用 Istio CNI 支持强安全 TKE Stack 集群的服务网格流量捕获
    E. ANDfinity
  • 原文地址:https://blog.csdn.net/hkyw000/article/details/127927574