zoukankan      html  css  js  c++  java
  • 关于控制mysql的binlog日志刷入磁盘频率的参数理解

    最近一直执迷于mysql的binlog日志刷入磁盘频率的几个参数,一直无法完全理解清楚,今天反复的看官方文档,并且将看到的心得记录一二。

    先说个概念:

                       数据脏页:当mysql的内存数据页和磁盘的数据不一致的时候,内存的数据,就叫做脏数据,刷盘的过程就是刷脏页。

    【关于控制binlog刷入磁盘的参数】

         1.sync-binlog:控制binlog刷入磁盘的频率

              default vaule:1

           0:禁止MySQL服务器将二进制日志同步到磁盘。相反,MySQL服务器依赖于操作系统不时地将二进制日志刷新到磁盘,就像处理其他文件一样。此设置提供了最佳性能,但是在出现电源故障或操作系统崩溃时,服务器可能提交了未同步到二进制日志的事务。

         1:允许在事务提交之前将二进制日志同步到磁盘。这是最安全的设置,但是由于磁盘写操作的增加,可能会对性能产生负面影响。在出现电源故障或操作系统崩溃时,二进制日志中缺少的事务仅处于准备状态。这允许自动恢复例程回滚事务,从而保证二进制日志中没有丢失任何事务。

         N:其中N是0或1之外的值:在收集了N个二进制日志提交组之后,将二进制日志同步到磁盘。在出现电源故障或操作系统崩溃时,服务器可能提交了未刷新到二进制日志的事务。由于磁盘写操作数量的增加,该设置可能会对性能产生负面影响。值越大,性能越好,但是数据丢失的风险越大。

    官方:https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html

        2.innodb-flush-log-at-trx-commit:(控制redo log刷新到磁盘)控制提交操作的严格的ACID遵从性和更高的性能之间的平衡,当提交相关的I/O操作被重新安排并成批执行时,可以获得更高的性能。通过更改默认值可以获得更好的性能,但是在崩溃时可能会丢失事务。

         default vaule:1

       1: 默认设置为1是完全符合ACID要求的。日志在每次事务提交时被写入并刷新到磁盘。
       0:设置为0时,每秒将日志写入并刷新到磁盘一次。没有刷新日志的事务可能在崩溃中丢失。
       2:如果设置为2,则在每个事务提交之后写入日志,并每秒刷新一次磁盘。没有刷新日志的事务可能在崩溃中丢失。

    以上两个参数都是关于binlog刷入到磁盘,默认是设置成双一是最安全的,在系统崩溃的时候,数据不会丢失的。

    2.开启binlog后事务的提交顺序

    1. 先记录 undo/redo log,确保日志刷到磁盘上持久存储。
    2. 更新数据记录,缓存操作并异步刷盘。
    3. 将事务日志持久化到 binlog。
    4. 提交事务,在 redo log 中写入commit记录。

    参考文档:https://www.cnblogs.com/wupeixuan/p/11734501.html

                     http://blog.itpub.net/22664653/viewspace-1063134/

                    https://www.cnblogs.com/mao3714/p/8734838.html  

                     https://blog.csdn.net/sofia1217/article/details/53968205

  • 相关阅读:
    Android(一)
    git
    UBuntu18.04 配置环境
    TensorRT Development document (Python)
    继续
    tensorRT C++ API
    tensorRT 与yolov3_tiny
    浅谈PHP进程管理
    nginx 平滑重启的实现方法
    fast-cgi & php-fpm 等的理解 (讨论试理解)
  • 原文地址:https://www.cnblogs.com/liuxiuxiu/p/12750542.html
Copyright © 2011-2022 走看看