• 关于控制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

  • 相关阅读:
    webservice时间类型XMLGregorianCalendar和Date的转换
    webservice中jaxws:server 和jaxws:endpoint的区别
    使用CXF开发JAX-WS类型的WebService
    使用TCP/IP Monitor监视Soap协议
    Webservice优缺点总结
    WebService两种调用方法
    DOS命令运行java文件,批量引用jar包
    eclipse创建的maven项目无法部署到tomcat
    图片翻转效果
    掷骰子效果
  • 原文地址:https://www.cnblogs.com/liuxiuxiu/p/12750542.html
Copyright © 2020-2023  润新知