Mysql——flush链表
一、flush链表概述
如果我们修改了Buffer Pool中某个缓冲页的数据,那么它就与磁盘上的页不一致了,这样的缓冲页也被称之为脏页(dirty page)。
为了性能问题,我们每次修改缓冲页后,并不着急立刻把修改刷新到磁盘上,而是在未来的某个时间点进行刷新操作。
如果有了修复发生,不是立刻刷新,那之后再刷新的时,我们怎么知道Buffer Pool中哪些页是脏页,哪些页从来没有被修改过呢?
创建一个存储脏页的链表,凡是被修改过的缓冲页对应的控制块都会作为节点加入到这个链表中。该链表也被称为flush链表。
flush链表的结构与free链表差不多,flush链表的结构如下图所示:
是否会存在一个控制块既是free链表的节点,也是flush链表的节点吗?
不会的。因为如果一个缓冲页是空闲的,那它肯定不可能是脏页。反之亦然。
后台有专门的线程负责每隔一段时间就把脏页刷新到磁盘。这样就不影响用户线程处理正常的请求了。
刷新方式有哪几种?
(1)、从flush链表中刷新一部分页面到磁盘1、后台线程会根据当时系统的繁忙程度确定刷新速率,定时从flush链表中刷新一部分页面到磁盘。即:BUF_FLUSH_LIST
2、有时后台线程刷新脏页的进度比较慢,导致用户准备加载一个磁盘页到Buffer Pool中时没有可用的缓冲页。此时,就会尝试查看LRU链表尾部,看是否存在可以直接释放掉的未修改缓冲页。如果没有,则不得不将LRU链表尾部的一个脏页同步刷新到磁盘(与磁盘交互是很慢的,这会降低处理用户请求的速度)。即:BUF_FLUSH_SINGLE_PAGE(2)、从LRU链表的冷数据中刷新一部分页面到磁盘,即:BUF_FLUSH_LRU
1、后台线程会定时从LRU链表的尾部开始扫描一些页面,扫描的页面数量可以通过系统变量innodb_lru_scan_depth来指定,如果在LRU链表中发现脏页,则把它们刷新到磁盘。
2、控制块里会存储该缓冲页是否被修改的信息,所以在扫描LRU链表时,可以很轻松地获取到某个缓冲页是否是脏页的信息。
Mysql——flush链表相关推荐
- 深入理解MySQL——LRU、Free和Flush 链表
首先,缓冲池申请的内存空间一定是页大小(默认16KB)的倍数,换句话说,虽然缓冲池是一块很大的内存区域,然而在使用时是根据固定的页大小进行管理的.如图1-1所示∶ 缓冲池有一个 free 链表,其中保 ...
- buffer pool详解(free链表+flush链表+lru链表)
buffer pool是什么? 是一块内存区域,当数据库操作数据的时候,把硬盘上的数据加载到buffer pool,不直接和硬盘打交道,操作的是buffer pool里面的数据 数据库的增删改查都是在 ...
- mysql flush pri_mysql命令flush privileges
mysql> update mysql.user set password=PASSWORD('新密码') where User='root'; mysql> flush privile ...
- mysql flush logs时出现ERROR 1105
mysql 5.7.11 on Oracle Linux 5.8 查看eror log所在目录为 mysql> show variables like '%log_error%'; +----- ...
- Mysql flush privileges
mysql> update mysql.user set password=PASSWORD('新密码') where User='root'; mysql> flush privile ...
- mysql flush 使用
FLUSH语法 FLUSH [LOCAL | NO_WRITE_TO_BINLOG] flush_option [, flush_option] ... 如果您想要清除MySQL使用的部分内部缓存,您 ...
- mysql flush cache_mysql的SQL_NO_CACHE(在查询时不使用缓存)和sql_cache用法
转自:http://www.169it.com/article/5994930453423417575.html 为了测试sql语句的效率,有时候要不用缓存来查询. 使用 SELECT SQL_NO_ ...
- mysql左链表右链表区别_MySql链表语句--博客园老牛大讲堂
为什么链表?--博客园老牛大讲堂 因为表与表之间有关系,而且查询时需要两张表的某些数据. 链表的前提是:表与表之间必须设置主外键吗? 不是的,其实表与表之间不需要设置主外键关系,用数据库语句就可以实现 ...
- mysql如何链表查询_mysql怎样两表查询?
mysql两表查询的方法:1.使用"select 字段列表 from 表1,表2 [where 条件]"进行查询:2.使用"SELECT 字段列表 FROM 表1 关键字 ...
最新文章
- 计算机应用a级考试,四川省职称计算机应用能力考试A级模拟题
- TFOD:基于TFOD API的官方模型案例对图片进行目标检测
- 软件设计原则(五)接口隔离原则 -Interface Segregation Principle
- 关于网上cython书籍的调研
- 如何在Outlook 2013中管理附件
- JavaScript 开发工具webstrom使用指南
- 谈谈App的混合开发
- 计算机网络与社会需求,计算机网络的技术论文计算机网络与社会需求.doc
- 【数据结构笔记46】Sort with Swap(0,*)只允许交换0的排序
- react ssr php,一文吃透 React SSR 服务端渲染和同构原理
- 大数据分析技术趋势有哪些
- HCIE-Security Day17:防火墙双机热备实验(五):防火墙旁挂交换机,交换机静态路由引流
- Qt:QML:JavaScript 和QML 语法错误表
- 中国象棋游戏设计与实现
- html竖线分割符的特殊符号,网站标题用什么分隔符号
- 腾讯文件和微云服务器,网盘Web客户端对比:腾讯微云支持32GB单文件上传
- matlab中floor函数,Matlab基本函数-floor函数
- .net core Fleck WebSocket使用笔记
- 什么是骨传导耳机,骨传导耳机有什么优缺点
- 【CNC——第8篇】PMAC 与 PewinPro2 建立通讯