Mysql初探:内存数据刷盘机制
一、mysql 的刷盘机制而之前提到过,mysql 使用了 WAL 技术,即更新的时候先更新内存中的数据,然后必要的时候再将内存中的数据刷入磁盘。我们把内存中这些被修改过,跟磁盘中的数据页不一致的数据页称为脏页。 其中,有四种情况会触发脏页的刷盘:
其中,第三种情况不会为系统带来过多影响的,第四中情况下不会在乎为系统带来的影响。所以我们只需要关注第一和第二种情况: 对于第二种情况,由于 mysql 的更新需要先写日志,所以当日志满了的情况下,所有的更新都会停止,一直到刷完盘日志腾出了空间为止; 而对于第二种情况,当查询的数据在内存中的数据页没有的时候,就需要淘汰旧页释放内存以读入新页,所以当一次查询导致需要淘汰的脏页过多的时候,就需要先等待较长的刷盘时间,然后才能获取响应。 为了避免上述两种情况,必须要控制脏页在内存中的比例。 二、刷脏页的控制策略首先,我们必须要知道主机磁盘的写入能力有多强,这样 innodb 才可以知道它刷脏页的速度最快应该是多快。 我们可以通过设置
参数 而每次写入 redo log 的写入点 wp 都会有一个序号,innodb 会根据这个序号和上一次清理日志的界限 cp 之间的差值——我们假设为 N——计算得到一个范围在 0 到 100 之间的数字,这个公式是 根据上述算得的 这一整个流程对应的图片是这样的: 所以,我们需要关注内存中的脏页比例,让它尽量不要到75%,并且合理的设置 其中,针对脏页的比例,我们可以通过 另外,由于 mysql 存在这样一个机制:如果要刷盘的脏页相邻的数据页恰好也是脏页,就一起写入磁盘,如果邻居的邻居也是如此。在机械硬盘时代这个策略可以减少随机IO,但是如果使用固态硬盘的话随机IO的性能往往比较高,所以使用这个策略反而拖累了查询性能。因此可以通过 三、总结innodb 有四种情况会触发脏页的刷盘:
innodb 通过的刷盘速度通过类似这样的公式计算:
当使用固态硬盘的时候,可以设置 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- MYSQL教程mysql5.6.19下子查询为什么无法使用索引
- Mysql应用关于MySQL数据迁移--data目录直接替换注意事项的详
- mysql – 在数据库中存储“无效”日期
- Mysql学习详解mysql 获取当前日期及格式化
- Mysql入门PHPStorm.WebStrom配置本地项目与运程服务器同步
- Mysql应用MyEclipse连接Mysql数据库的方法(一)
- mysql – 未定义的方法`eq’代表nil:nilClass with rails
- 探索Access数据库最佳NTFS权限设置(1)
- Mysql必读解析mysql中:单表distinct、多表group by查询去除
- php – 使用MYSQL在日期之间选择行?