2020-10-15:mysql的双1设置是什么?

福哥答案2020-10-15:#福大大架构师每日一题#架构

答案来自知乎:async

其实就是innodb_flush_log_at_trx_commit和sync_binlog两个参数设置,都设置为1就是双1设置。MySQL 默认配置就是双1配置。
innodb_flush_log_at_trx_commit 是 innodb 引擎的配置,sync_binlog 是 MySQL 引擎上层的配置,都是控制磁盘写入策略。函数

MySQL innoDB引擎在事务 commit 以后:
1.binlog 写内存。
2.redo log 写内存。
3.根据这两个配置决定这两个日志是否刷盘(调用fsync)。
4.commit完成。
innodb_flush_log_at_trx_commit:redo log 的刷盘策略,默认为1。
1.若是innodb_flush_log_at_trx_commit设置为0:log buffer将每秒一次地写入log file中,而且log file的flush(刷到磁盘)操做同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操做;
2.若是innodb_flush_log_at_trx_commit设置为1:每次事务提交时MySQL都会把log buffer的数据写入log file,而且flush(刷到磁盘)中去;
3.若是innodb_flush_log_at_trx_commit设置为2:每次事务提交时MySQL都会把log buffer的数据写入log file,可是flush(刷到磁盘)操做并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操做。url

sync_binlog:binlog 的刷盘策略,默认为0。
若是为0,像操做系统刷其余文件的机制同样,MySQL不会同步到磁盘中去而是依赖操做系统来刷新binary log。
sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。操作系统


评论.net