zoukankan      html  css  js  c++  java
  • mysql-刷脏页(12)

    一,mysql因为WAL机制,在更新时,首先会更新内存,再写redo log。一般情况下是在空闲时,将redo log刷新到磁盘中。

    二,什么是脏页。当内存中与磁盘中的数据不一致时,内存中的数据页就称为脏页。(也可以理解为redo log还没更新到磁盘中)

    三,什么时候会触发数据库flush(刷脏页):

                                              1,redo log写满,系统会停止一切更新操作;

                                              2,mysql认为空闲的时候,主动去刷新;

                                              3,系统内存不足。当需要新的内存页,而内存不够用的时候,就要淘汰一些数据页,空出内存给别的数据页使用。如果淘汰的是“脏页”,就要先将脏页写到磁盘。

                                              4,MySQL正常关闭的情况。这时候,MySQL会把内存的脏页都flush到磁盘上,这样下次MySQL启动的时候,就可以直接从磁盘上读数据,启动速度会很快。

    四,控制刷脏页的策略:

                                              1,正确设置innodb_io_capacity参数,它会告诉InnoDB你的磁盘能力。合理地设置innodb_io_capacity的值,并且平时要多关注脏页比例,不要让它经常接近75%。

                                              2,indodb刷脏页会涉及“连坐”操作,即如果刷新某个脏页,判断连续的数据页是否也是脏页,一直循环,这样无疑会提高io效率,会减少很多随机io,而刷脏页的过程由于会占用资源,可能会让你的更新和查询语句的响应时间长一些。参数innodb_flush_neighbors 为1 代表开启连坐机制,0为关闭。在MySQL 8.0中,innodb_flush_neighbors参数的默认值已经是0了。

  • 相关阅读:
    “Win10 UAP 开发系列”之 在MVVM模式中控制ListView滚动位置
    “Win10 UAP 开发系列”之主题模式切换
    Windows Phone 8.1中AppBarToggleButton的绑定问题
    Windows Phone 8.1中处理后退键的HardwareButtons.BackPressed事件
    在后台代码中动态生成pivot项并设置EventTrigger和Action的绑定
    数据对象转json与md5加密注意事项
    iOS中wkwebview加载本地html的要点
    iOS项目开发常用功能静态库
    AFN中请求序列化的设置
    swift中的AnyHashable
  • 原文地址:https://www.cnblogs.com/enchaolee/p/11675717.html
Copyright © 2011-2022 走看看