暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

每日一面 - MySQL 的双一设置是什么?

我的编程喵 2021-07-16
561


其实就是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

  • 如果innodb_flush_log_at_trx_commit
    设置为 0:log buffer
    将每秒一次地写入log file
    中,并且log file
    flush
    (刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作;

  • 如果innodb_flush_log_at_trx_commit
    设置为 1:每次事务提交时MySQL
    都会把log buffer
    的数据写入log file
    ,并且flush
    (刷到磁盘)中去;

  • 如果innodb_flush_log_at_trx_commit
    设置为 2:每次事务提交时MySQL
    都会把log buffer的数据写入log file
    ,但是flush
    (刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次flush
    (刷到磁盘)操作。

sync_binlog
:binlog 的刷盘策略,默认为0

  • 如果为 0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log

  • sync_binlog = N (N>0)
    ,MySQL 在每写 N 次 二进制日志binary log
    时,会使用fdatasync()
    函数将它的写二进制日志binary log
    同步到磁盘中去。

每日一刷,轻松提升技术,斩获各种offer:


文章转载自我的编程喵,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论