• 数据库刷脏页


    1.什么是脏页、干净页

      当内存中和的数据页和磁盘中的不一致时,称为脏页;当内存中的数据页和磁盘中的一致时,称为干净页;

    2.什么时候刷脏页

      内存中的脏页进行写磁盘的过程称之为刷脏页,刷脏页的时候需要暂停所有业务更新,所以系统会产生卡顿的现象;

    • 当binlog写满的时候,需要暂停更新,刷脏页;
    • 当内存不足,内存页放不下的时候,需要刷脏页;、
    • 当系统空闲的时候会定期刷脏页;
    • 当mysql正常关闭的时候需要刷脏页;

    3.刷脏页对性能的影响

      上面第三种和第四种情况是在空闲的时候进行的,所以不会对业务产生影响;

      当binlog文件写满的时候,这种情况是需要避免的,更新全部被堵住,写性跌为0,

      当内存不足的时候,会淘汰脏页 ,这是常态的,这个时候数据库响应的时间会变长;

    4.刷脏页的性能控制

    • 系统的io能力
    • 脏页比例
    • binlog的写盘速度

      先要提升刷脏页的速度,首先是提高刷脏页的速度,这个速度和系统的io能力有关,

      这是innodb刷脏页的能力show global VARIABLES like "innodb_io_capacity";

      这个参数需要根据当前系统的io能进行设置,如果设置不当可能造成刷新很慢;

      这个值建议设置成磁盘的 IOPS。磁盘的 IOPS 可以通过 fio 这个工具来测试,下面的语句是我用来测试磁盘随机读写的命令:
      检测系统的io能力:fio -filename=$filename -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest;

      虽然上述参数设置合适后可以使系统具有全力刷脏页的能力,但是系统不能全部用来刷脏页,需要定义刷脏页的速度,

      刷脏页的速度影响因素有以下两个:

    • 脏页比例
    • binlogde 写盘速度

      脏页比例的计算M:show VARIABLES like "innodb_max_dirty_pages_pct"; 这是系统设置的脏页比例上限,默认是75%,系统会根据当前脏页比例(Innodb_buffer_pool_pages_dirty/Innodb_buffer_pool_pages_total)M算出一个0~100的数值F1(M)

      

        M伪代码
    F1(M)
    {
      if M>=innodb_max_dirty_pages_pct then
          return 100;
      return 100*M/innodb_max_dirty_pages_pct;
    }
    

      

      binlog的写盘速度计算N:binlog每次写入日志都会对应一个序号,当前写入的序号和checkpoint序号之间的差值就是N,根据这个N算出一个0~100之间的数值F2(N)。

      然后取F1(M)和F2(N)之间的最大值作为R ,算出刷脏页的速度是innodb_io_capacity*R%;

    5.刷脏页的策略

      在系统需要把一个脏页刷掉的时候往往会把相邻的脏页一起刷掉,如此连续可能一次就会刷一大片的脏页,这个策略由show VARIABLES like "innodb_flush_neighbors"这个参数控制,如果为1 则表示连带刷,如果为0 表示个刷个的。

    找“邻居”这个优化在机械硬盘时代是很有意义的,可以减少很多随机 IO。机械硬盘的随机 IOPS 一般只有几百,相同的逻辑操作减少随机 IO 就意味着系统性能的大幅度提升。而如果使用的是 SSD 这类 IOPS 比较高的设备的话,我就建议你把 innodb_flush_neighbors 的值设置成 0。因为这时候 IOPS 往往不是瓶颈,而“只刷自己”,就能更快地执行完必要的刷脏页操作,减少 SQL 语句响应时间。

  • 相关阅读:
    取多列数据的最大值、最小值sql
    java中实现时间差的计算
    数据更新sql
    自连接的用法sql
    获取第一条,最后一条数据sql
    复制表结构 表数据sql
    用 ORDER BY 生成“排序”列sql
    表之间的数据匹配(生成交叉表)sql
    SIP呼叫流程
    如何在WindowsPhone Bing Map控件中显示必应中国中文地图、谷歌中国中文地图。
  • 原文地址:https://www.cnblogs.com/xiatc/p/16363693.html
Copyright © 2020-2023  润新知