[MySQL] 参数: innodb_flush_log_at_trx_commit和sync_binlog

MySQL参数: innodb_flush_log_at_trx_commit和sync_binlog

innodb_flush_log_at_trx_commitsync_binlog是MySQL控制磁盘写入策略的重要参数.html

  • innodb_flush_log_at_trx_commit

    1. innodb_flush_log_at_trx_commit=0时, log buffer将每秒一次地写入log file, 而且log file的flush(刷新到disk)操做同时进行. 此时, 事务提交是不会主动触发写入磁盘的操做.mysql

    2. innodb_flush_log_at_trx_commit=1时(默认), 每次事务提交时, MySQL会把log buffer的数据写入log file, 而且将log file flush(刷新到disk)中去.sql

    3. innodb_flush_log_at_trx_commit=2时, 每次事务提交时, MySQL会把log buffer的数据写入log file, 但不会主动触发flush(刷新到disk)操做同时进行. 然而, MySQL会每秒执行一次flush(刷新到disk)操做.安全

      然而, 每秒flush并不能确保100%每秒发生, 由于os调度问题.async

    默认的1能够得到更好地数据安全, 但性能会打折扣. 不过非1时, 在遇到crash可能会丢失1秒的事务; 设置为0时, 任何mysqld进程crash会丢失上1秒的事务; 设置为2时, 任何os crash或者机器掉电会丢失上1秒的事务; InnoDB的crash recovery运行时会忽略这些数据.函数

  • sync_binlog

    ![](http://images2015.cnblogs.com/blog/748358/201603/748358-20160327131735761-1330837796.png)
    1. sync_binlog=0时(默认), 如os刷新其余文件的机制同样, MySQL不会刷新log buffer到disk中去, 而是依赖os机制刷新log buffer数据到binary log中.性能

    2. sync_binlog=1时, MySQL在写1次二进制日志binary log时, 会使用fdatasync()函数将二进制binary log同步到disk中去.(安全性最高的配置)3d

    3. sync_binlog=N(N>1)时, MySQL在写N次二进制日志binary log时, 会使用fdatasync()函数将二进制binary log同步到disk中去.日志


当两个参数设置为双1的时候, 写入性能最差. 当sync_binlog=N(N>1) && innodb_flush_log_at_trx_commit=2, MySQL的写操做才能达到最高性能.code


ref:
https://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html

相关文章
相关标签/搜索