返回顶部
首页 > 资讯 > 数据库 >MySQL的Flush-List和脏页的落盘机制
  • 924
分享到

MySQL的Flush-List和脏页的落盘机制

MySQLFlush-ListMySQL脏页MySQL落盘机制 2022-05-17 13:05:25 924人浏览 独家记忆
摘要

一、回顾 Mysql启动后Buffer Pool会初始化。Buffer Pool也会初始化好N多个空白的缓存页,以及它们的描述数据会被组织成LRU链表以及FreeList 双向链表。 这时你从磁盘中读取一个数据页,会

一、回顾

Mysql启动后Buffer Pool会初始化。Buffer Pool也会初始化好N多个空白的缓存页,以及它们的描述数据会被组织成LRU链表以及FreeList 双向链表。

这时你从磁盘中读取一个数据页,会先从Free List中找出一个空闲缓存页的描述信息,然后将你读出的数据页中加载进缓存页中。同时将缓存页的描述信息从Free List中剔除,此外该描述信息块还会被维护进LRU链表中。

数据页被加载进Buffer Pool后你就可以对其进行变更操作了。

二、Flush List

为了加快响应客户端的速度,mysql会在Buffer Pool中对数据进行修改,可是一旦你对LRU链表中的缓存页做了修改,那该页中的数据和磁盘中的数据页信息就不一致了!大家一般管这种数据页叫做脏页。

为了保证数据的最终一致性,Mysql是需要将脏页刷新回磁盘的!

但是问题是:需要将哪些数据页刷新回磁盘呢?

这就引出了Flush List~

Flush List 和 Free List很像,都是由Buffer Pool中数据描述信息组织而成的双向链表。

一旦你对内存中的缓冲页作出了修改,那该缓冲页对应的描述信息块就会添加进 Flush List。这样当Buffer Pool中的数据页不够用时,我们就可以优先将 Flush List中的脏数据页刷新进磁盘中。

如果你读了前几篇文章那你肯定知道了 LRUList、FreeList、FlushList、Buffer Pool、脏页、脏数据。

下面乘胜追击!一起看一下脏页的落盘机制

三、什么是脏页?什么是脏数据?

什么是脏页?

我在介绍Flush List 的那篇文章有提及,脏页就是LRU链表中被修改了的缓存页。他们和磁盘中的数据页不一致,脏页是需要被刷新回磁盘的。

什么是脏数据?

这个问题其实引出了脏读的概念。举个例子:事物A中读取到了事物B中未提交的数据,我们管这些数据叫做脏数据。

四、脏页刷回磁盘的时机

当Buffer Pool不够用时,根据LRU机制,MySQL会将Old SubList部分的缓存页移出LRU链表。如果被移除出去的缓存页的描述信息在Flush List中,MySQL就得将其刷新回磁盘。

InnoDB存储引擎将脏页刷回磁盘的时机有蛮多的,你可以把它当作拓展知识大概浏览一下。

当MySQL数据库关闭时,会将所有的脏数据页刷新回磁盘。这个功能由参数:innodb_fast_shutdown=0控制,默认让InnoDB在关闭前将脏页刷回磁盘,以及清理掉undo log。

有一个后台线程Master Thread会按照每秒或者每十秒的速度,异步的将Buffer Pool中一定比例的页面刷新回磁盘中。

在MySQL5.7中,Buffer Pool的刷新由page cleaner threads完成。

我们可以通过innodb_page_cleaners参数控制page cleaner threads线程的数量,但是当你将这个数值调整的比Buffer Pool的数量还大时,MySQL会自动将 innodb_page_cleaners数量设置为innodb_buffer_pool_instances的数量。
Innodb1.1.x之前需要保证LRU列表中有至少100个空闲页可以使用。低于这个阈值就会触发脏页的刷新。
从MySQL5.6,也就是innodb1.2.X开始,innodb_lru_scan_depth参数为每个缓冲池实例指定page cleaner threads 扫描Buffer Pool来查找要刷新的脏页的下行距离。默认为1024,该后台线程每秒都会执行一次。
4、当脏数据页太多时,也会触发将脏数据页刷新回磁盘。该机制可由参数innodb_nax_dirty_pages_pct控制,比如将其设置为75,表示,当Buffer Pool中的脏数据页达到整体缓存的75%时,触发刷新的动作。现实情况是该参数默认值为0。以此来禁用Buffer Pool早期的刷新行为。

当redo log不可用时,也会强制脏页列表中的脏页刷新回磁盘。这个机制同样由一个后台线程完成。

五、其他关于脏页刷新的知识点

刷新临接数据页:意思是当MySQL将某脏页刷新回磁盘时,是否也以相同的态度将该脏页邻接的脏页一并刷新回磁盘。

可以通过参数innodb_flush_neighbors控制该过程。

  • 设置为0时表示,禁用刷新邻接的功能。
  • 设置为1时表示,以相同的态度刷新其邻接的脏页。
  • 设置为2时表示,以相同的程度刷新脏页。

那如何选择将其设置为哪种状态呢?

你可以根据MySQL实例所在机器的存储类型来决定。如果为HDD存储建议将其开启,因为HDD的磁盘刷新速率较低,开启该参数后可以有效的减少io操作。相反如果使用SSD存储,其本身就有高磁盘IO的特性,建议禁用该参数。

以上就是MySQL的Flush-List和脏页的落盘机制的详细内容,更多关于MySQL Flush-List和脏页的落盘机制的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL的Flush-List和脏页的落盘机制

本文链接: https://lsjlt.com/news/10001.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL的Flush-List和脏页的落盘机制
    一、回顾 MySQL启动后Buffer Pool会初始化。Buffer Pool也会初始化好N多个空白的缓存页,以及它们的描述数据会被组织成LRU链表以及FreeList 双向链表。 这时你从磁盘中读取一个数据页,会...
    99+
    2022-05-17
    MySQL Flush-List MySQL 脏页 MySQL 落盘机制
  • InnoDB脏页刷新机制的原理
    这篇文章主要讲解了“InnoDB脏页刷新机制的原理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“InnoDB脏页刷新机制的原理”吧!我们知道InnoDB采用...
    99+
    2024-04-02
  • 详解MySQL的数据行和行溢出机制
    一、行 有哪些格式? 你可以像下面这样看一下你的MySQL行格式设置。 其实MySQL的数据行有两种格式,一种就是图中的 Compact格式,还有一种是Redundant格式。 Compact是一种紧凑的行格式,设...
    99+
    2022-05-10
    MySQL 数据行 MySQL 行溢出
  • MySQL的锁机制之全局锁和表锁的实现
    前言 对mysql锁的总结学习,本文将围绕,加锁的概念,加锁的应用场景和优化,以及不加锁会导致的问题这些方向进行总结学习。mysql的全局锁和表锁是本文的重点 一、全局锁 全局锁的介绍以及使用 全局锁就是对整个数据库实例...
    99+
    2023-01-15
    MySQL全局锁和表锁 MySQL全局锁 MySQL表锁
  • MySQL隔离级别和锁机制的深入讲解
    目录简述:1. 事务的四大特性2.多事务并发带来的问题3.事务的隔离级别4.演示不同隔离级别出现的问题读未提交读已提交可重复读串行化5.锁机制间隙锁临建锁排他锁总结简述: 我们的M...
    99+
    2024-04-02
  • MySQL数据类型和存储机制的示例分析
    小编给大家分享一下MySQL数据类型和存储机制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.1 数据类型概览数据类...
    99+
    2024-04-02
  • MySQL中ibd文件的存储机制和管理策略
    MySQL中ibd文件的存储机制和管理策略 MySQL是一种常用的关系型数据库管理系统,广泛应用于各个领域的数据管理中。在MySQL中,数据表的数据和索引是以不同的方式进行存储的,其中...
    99+
    2024-04-02
  • MySQL的数据行和行溢出机制是什么意思
    这篇文章给大家分享的是有关MySQL的数据行和行溢出机制是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。一、行 有哪些格式?你可以像下面这样看一下你的MySQL行格式设置...
    99+
    2024-04-02
  • MySQL中外键和主键的自动连接机制是什么?
    MySQL中外键和主键的自动连接机制是通过建立外键约束来实现的。外键约束是一种关系约束,在一个表中的字段与另一个表中的字段建立关联,从而确保数据的一致性和完整性。主键是一个表中唯一标识...
    99+
    2024-03-15
  • 队列在PHP与MySQL中的容错机制和故障恢复的实现方法
    概述:队列是一种常用的数据结构,在计算机科学中被广泛应用。它类似于现实生活中的排队,可以按照先进先出的原则处理任务。在PHP与MySQL中使用队列可以实现一些复杂的任务调度,同时也需要考虑容错机制和故障恢复,保证系统的可靠性。本文将介绍在P...
    99+
    2023-10-21
    队列 容错机制 故障恢复
  • 优化网页渲染性能:详细剖析重绘和回流的机制与应对策略
    提升页面渲染效率:深入解析重绘和回流的原理与防范 随着互联网的发展,网站和应用程序的性能要求越来越高。页面加载速度成为了用户体验的关键因素之一。而页面渲染效率的提升,可以有效减少页面加载时间,提升用户体验。在优化页面渲染效率的过...
    99+
    2024-01-26
    页面渲染效率 重绘 回流
  • 队列在PHP与MySQL中的消息确认机制和消息重试的处理方法
    引言:随着互联网应用的发展,很多在线服务需要处理大量的请求,而这些请求往往需要一个异步的处理方式。队列是一种常见的解决方案,可以有效地将请求与处理解耦,提高系统的性能和可靠性。本文将介绍队列在PHP与MySQL中的消息确认机制和消息重试的处...
    99+
    2023-10-21
    队列 消息确认 消息重试
  • 队列技术在PHP与MySQL中的异步任务处理和消息回调机制的应用
    随着互联网的快速发展,用户对于网站和应用的需求也越来越高。为了提高用户体验和应对高并发访问的需求,异步任务处理和消息回调机制成为了开发中不可或缺的一环。本文将介绍如何使用队列技术,在PHP与MySQL中实现异步任务处理和消息回调机制,并提供...
    99+
    2023-10-21
    队列技术 异步任务处理 消息回调机制
  • 如何实现MySQL底层优化:缓存机制的高级应用和性能优化策略
    抱歉,由于涉及专业的技术性内容和代码示例,我无法在当前平台上提供1200字以内的详实文段。你可以在专业的技术网站或者数据库技术书籍上寻求帮助。...
    99+
    2023-11-08
    缓存 MySQL 优化
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作