mysql的双1设置

双1设置指的是

innodb_flush_log_at_trx_commitsync_binlog,这两个变量名应该一字不错的记住,在面试时一字不错的说出来,肯定能加分。

1、innodb_flush_log_at_trx_commit

参考https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit

默认值为1。当值为1时,每次事务提交都会把redo log buffer中的数据写入redo log,并刷新到磁盘。

MySQL 8.0.11 introduced dedicated log writer threads for writing redo log records from the log buffer to the system buffers and flushing the system buffers to the redo log files. Previously, individual user threads were responsible those tasks. As of MySQL 8.0.22, you can enable or disable log writer threads using the innodb_log_writer_threads variable. Dedicated log writer threads can improve performance on high-concurrency systems, but for low-concurrency systems, disabling dedicated log writer threads provides better performance.

当值为0时,每隔1s写一次redo log并刷新到磁盘。

当值为2时,每次事务提交都会写入redo log,但redo log每隔1s才会刷新到磁盘。在mysql崩溃时,那些已提交、但还没刷新到磁盘的事务,会丢失。

需要指出的是,当值为0或2时,并不能100%保证刷新磁盘的间隔就是1s。ddl刷新redo log独立于innodb_flush_log_at_trx_commit的设置。ddl会导致刷新更频繁一些,而调度问题会导致刷新不那么频繁。如果每秒刷新一次redo log,则在崩溃时至多丢失1s的事务。如果redo log刷新频率高于或低于每秒一次,则可能丢失的事务量会相应的变化。

redo log刷新频率由innodb_flush_log_at_timeout控制,单位是s,默认值是1,最小值为1,最大值为2700。假如设为N,则崩溃时最多丢失N秒的事务。

2、sync_binlog

该变量控制mysql同步binlog到磁盘的频率。

参考https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_sync_binlog

默认值为1。当值为1时,允许在事务提交前就同步binlog到磁盘。这是最安全的设置,但由于磁盘写入次数增加,可能会对性能产生负面影响。在电源故障或操作系统崩溃时,binlog中丢失的事务仅处于准备状态,这允许自动恢复程序回滚事务,从而保证binlog中不会丢失任何事务。???

当值为0时,禁止mysql服务器将binlog同步到磁盘,也就是说此时要依赖操作系统的刷新。这个设置提供最佳性能,但是在电源故障或操作系统崩溃时,已经提交的事务,可能不会被同步到磁盘。

posted on 2018-07-19 09:13  koushr  阅读(501)  评论(0编辑  收藏  举报

导航