BufferPool之链表

news2024/11/28 12:46:00

系列文章目录

MySQL之BufferPool


文章目录

  • 系列文章目录
  • 前言
  • 一、free链表
    • 1.1结构简图
    • 1.2 结构说明
  • 二、flush链表
    • 2.1 结构简图
    • 2.2 结构说明
  • 三、LRU链表
    • 3.1 结构简图
    • 3.2 LRU优化后结构简图
  • 附录


前言

提示:这里可以添加本文要记录的大概内容:

本文会介绍free链表,flush链表,LRU链表是什么,以及在Buffer pool中的作用与使用


一、free链表

1.1结构简图

free链表

1.2 结构说明

free链表组成: 由双向链表构成,free_pre指向上一个节点,free_next指向下一个节点,基节点中count代表空闲节点数量

free链表作用: free链表管理BufferPool中空闲缓冲页,BufferPool初始化后,所有缓冲页都是空闲,每个缓冲页对应的控制块都会加入free链表中

free链表基节点:管理free链表的节点,由free链表的头节点地址,尾节点地址,以及当前链表中节点的数量等信息。另外开辟的内存,不保存在BufferPool中

free链表使用: 从磁盘中加载一个页到BufferPool中时,检查hash表中是否已经加载该缓冲页(了解hash表结构),如果加载了,则直接读取,如果没有则从free链表中取出一个空闲缓冲页,并将该缓冲页对应的控制块信息填入,然后把该缓冲页对应的free链表节点(控制块)从free链表中移除,count-1

二、flush链表

2.1 结构简图

flush链表

2.2 结构说明

flush链表组成: 由双向链表构成,free_pre指向上一个节点,free_next指向下一个节点,基节点中count代表脏页节点数量

flush链表作用: 管理脏页,将需要刷新到磁盘的脏页保存在flush链表中

flush链表使用: 同样产生了脏页就加到flush链表中,等待刷新到(同步)磁盘中

三、LRU链表

3.1 结构简图

LRU链表

LRU链表组成: 全称Least Recently Used链表。由双向链表构成,free_pre指向上一个节点,free_next指向下一个节点,基节点中count代表节点数量

LRU链表作用: 解决BufferPool内存有限问题,淘汰使用的比较少的缓冲页。按照最少使用原则进行淘汰

LRU链表使用: 如果该页不在BufferPool中,将该页从磁盘加载到BufferPool的缓冲页时,将free链表节点减去,把该缓冲页对应得控制块作为节点塞到LRU链表得头部,如果以及加载在BufferPool中,则将该页对应得控制块移动到LRU链表得头部

LRU链表的局限性:预读问题, 针对全表扫描时占用大量使用频率非常低的页面问题。这两种问题都严重降低了BufferPool的命中率

3.2 LRU优化后结构简图

LRU链表优化后结构图

LRU链表的优化点:如图,将LRU链表分为young区域和old区域。其中young区域存储热点数据,old区域存储使用频率低的数据。
可通过系统变了innodb_old_blocks_pct控制,old区域默认占比37%

LRU链表的优化内容

  • 针对 预读问题:初次加载到BufferPool的缓冲页对应的控制块会放到old区域的头部,这样既不会影响到young中的热点数据,如果预读后不进行访问则会逐渐被淘汰
  • 针对 针对全表扫描时占用大量使用频率非常低的页面问题:我们知道全表扫描时会对每一条数据进行访问,而数据都存在页中,所以全表扫描时会对页进行多次访问,所以针对预读问题能解决的办法并不适用于全表扫描问题,故此提供了一个时间间隔来处理该问题。
    对全表扫描加入old区域的缓冲页,进行第一次访问时记录这个时间点,如果后续访问时间与第一次访问的时间点在某个时间点内(系统变量innodb_old_blocks_time控制这个时间点大小,默认值为1000ms),那么该页面就不会从old区域移动到young区域,否则会将其移动到young区域的头部

其它优化方式: 目的提高BufferPool命中率

  • 优化问题:young区域缓冲页每次访问一个缓冲页就要将该缓冲页移动到LRU链表头部,移动频率较高

为了管理好BufferPool,还有很多链表结构,unzip LRU链表,zip clean链表等等

附录

脏页: 与磁盘上的页数据不一致的缓冲页(其实也就是内存与磁盘数据不一致),这类页需要与磁盘同步

redo日志:记录数据库修改删除操作,满足系统崩溃后数据还能保证恢复的功能(持久性)。

lsn值: lsn值代表系统写入的redo日志量的一个总和

checkpoint: 因为redo日志文件组容量有限,所以redo日志是循环使用的,而checkpoint就是覆盖的redo日志操作

预读问题:预读出的数据,用不到的话就会白白占用BufferPool内存,同时还可能挤压到其他语句在BufferPool中的内存空间
InnoDB提供了预读功能:如果InnoDB认为执行当前请求时,可能会在后面读取某些页面,就会预先将这些页面加载到BufferPool中。根据触发方式分为:

  • 线性预读:由系统变量innodb_read_ahead_threshold控制,默认值是56。如果顺序访问某个的页面超过这个系统变量,就会触发一次异步读取下一个区中全部的页面到BufferPool中的请求。
  • 随机预读:由系统变量innodb_random_read_ahead控制,默认值为OFF(关闭)。如果某个区的13个连续的页面都被加载到BufferPool中,无论这个页面是不是顺序读取,都会触发一次异步读取本区中所有其他页面到BufferPool中的请求。

针对全表扫描时,占用大量使用频率非常低的页面问题: 全表扫描读取大量页,而BufferPool又没有足够空间容纳的话,就会将其他语句占用的BufferPool空间给覆盖,这样其他语句在执行的时候又需要重新从磁盘中加载页到BufferPool中。
使用频率非常低的页占用了使用频率非常高的页在BufferPool的内存,严重降低了BufferPool的命中率。

区:表空间的页太多了,为了更好的管理这些页,InndDB提出来区的概念,对于16kb的页来说,连续的64个页就是一个区,也就是一个区默认占用1M空间,每256个区划分为一组

其它:一般情况下都是后台线程对flush链表与LRU链表刷脏页,但是如果当前系统页面修改操作十分频繁,这就导致redo日志的操作十分频繁,系统lsn值增长过快,后台线程不能将脏页快速刷出,无法及时执行checkpoint,可能就会用到用户线程刷脏页(只有刷完脏页了,redo日志才会失效,才可以执行checkpoint),当然用用户线程刷脏页,肯定会影响到mysql效率,读写分离,能提高效率也有解决这一层问题的原因


想要体系的了解BufferPool,建议看书。
作者写的很好,通俗易通,读之前建议读者先了解基本的数据结构,有过mysql使用经验的读起来会更有趣

参考资料: 《MySQL是怎样运行的》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

锅炉防磨防爆可视化管理系统

电厂的各类安全事故中,锅炉四管泄爆事故占比最高、影响最大。四管泄漏不仅直接导致停机停炉、引起重大经济损失、威胁电网安全运行、甚至会直接造成机组管理人员的人身伤害。因此锅炉防磨防爆管理工作的好坏是保证机组稳定运行、工作人员安全、电厂整体效益的重要前…

全网最全最深:web前端架构师面试题+缜密全面的学习笔记

都说程序员工资高、待遇好, 2022 金九银十到了,你的小目标是 30K、40K,还是 16薪的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Offer 并不算难。然而,提升 Java…

Python爬虫库urllib使用详解

大家好 我是政胤 一、Python urllib库 Python urllib 库用于操作网页 URL,并对网页的内容进行抓取处理。 Python3 的 urllib。 urllib 包 包含以下几个模块: urllib.request - 打开和读取 URL。 urllib.error - 包含 urllib.request 抛出的异常。 url…

3.6.3、随机接入-CSMA/CD协议

总线局域网使用的协议 [^96 比特时间]: 发送 96 比特所耗费的时间,也成为帧间最小间隔。其作用是接收方可以检测出一个帧的结束,同时也使得所有其他站点都能有机会平等竟争信道并发送帧。 1、案例 多个主机连接到一根总线上,各主机随机发送帧…

system函数实践1:system函数进程的爸爸是谁?

前言 有两个问题: system函数中修改了环境变量,会不会影响执行它的进程? 不会。 首先,这个我测过了,因为我原本想用它来传递参数。 为什么?因为system函数执行的时候,会先创建一个shell,然后再…

自然灾害数据:中国台风数据集(更新至2022.3)

1、数据来源:中国天气网 2、时间跨度:1949-2021年 3、区域范围:全国 4、指标说明: 包含指标如下: 序号、编号、中文名、登陆时间、登陆序号、登陆地、登陆地地区代码、登陆时强度等级、省份代码、省份、城市代码、…

高分英语Essay写作内容怎么介绍?

英国Essay的写作非常讲究逻辑思维,除此之外,单词、语法、标点符号这些细节也会影响Essay能否拿到高分。为了帮助大家写出质量高的英国Essay,接下来我们就详细介绍一下如何才能写出一篇高分英语Essay。 English Essay pays much attention to …

CISAW培训可以自学报名考试吗?

首先要跟大家说明的是,CISAW是强制培训的,并不可以通过自学而取得证书,也就是说你需要找一家CISAW认证的培训机构(要选授权机构哦!)。众所周知,CISAW认证涉及了很多方向,那每个方向都…

centos系统下RabbitMQ安装教程

centos系统下RabbitMQ安装教程 我这里的环境用的腾讯云的轻应用环境 RabbitMQ是一个开源的遵循AMQP协议实现的基于Erlang语言编写,即需要先安装部署Erlang环境再安装RabbitMQ环境。需加注意的是,读者若不想跟着我的版本号下载安装,可根据两者…

Git 的内部工作原理

简介 通过本次分享学习 Git 的内部工作原理和实现方式。 学习这部分内容对于理解 Git 的用途和强大至关重要。 首先要弄明白一点,从根本上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制…

WPF基础知识系例

WPF系列-绘图和动画1、WPF绘图1.1 直线1.2 矩形1.3 椭圆1.4 路径1、WPF绘图 这里将从静态图像绘制入手,进而学习动画效果制作。WPF 拥有自己的一套图形 API ,使用这套 API 不但可以轻松地绘制出精美的图形,还可以方便地对图形进行滤镜、变形…

致敬逆行者网页设计作品 大学生抗疫感动专题网页设计作业模板 疫情感动人物静态HTML网页模板下载

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

RPC 对比 HTTP

初识RPC RPC 远程方法调用(Remote Procedure Call)大多用在服务治理领域 基本都是分布式环境中的注册中心来负责新服务的注册、服务续约、服务下线、服务销毁国内 Dubbo 是应用最广的 RPC 框架国外 gRPC RPC协议 无论哪种RPC方案,都要自定义…

你好,法语!A2知识点总结(3)

3.句型 3.1疑问 注意1 主谓倒装的疑问句式,主语必须是代词。 •主语是名词,不能直接倒装,要人为加进去一个代替主语的代词放在动词后面,“-”连接 •EX: Votre pre est professeur? •Est-votre pre professeur? •Votre pre e…

Kafka的设计原理

Kafka的设计原理和使用场景一、Kafka简介二、Kafka的架构2.1、Kafka 一些重要概念2.2、工作流程2.3、副本原理2.4、分区和主题的关系2.5、生产者2.5.1、分区可以水平扩展2.5.2、分区策略2.6、消费者2.6.1、消费方式2.6.2、分区分配策略2.7、数据可靠性保证2.7.1、副本数据同步策…

Linux基础知识

目录 流行的Linux发行版本 Linux系统的启动顺序 禁止使用ping命令 鉴定故障解决办法 user 不在 sudoers 文件中。此事将被报告解决办法 修改文件或目录的所属用户与权限 1、chgrp:更改文件属组 2、chown:更改文件属主,也可以同时更改文…

Agent 与对象的辨析

如果说对象是70年代以来软件界最激动人心的革新之一,那么,Agent的相关理论和技术,为分布式开放系统的设计与实现提供了新的途径,可以称之为软件开发的又一重大突破。讨论问题的前提是概念的澄清,什么是对象&#xff1f…

【学习笔记49】JavaScript的this指向

一、this指向 每一个函数内部都有一个关键字thisthis的值, 和函数的调用有关, 与函数书写无关 1. 普通调用方式 一个普通的全局函数, 在正常调用的情况下, this window function fn() {console.log(this); }fn() // this window2. 函数放置到对象 如果将函数放置到对象…

图数据技术护航网络安全 - Neo4j 大中华区总经理 方俊强

网络数字化及人工智能为许多行业来革命性的进步,但与此同时,网络安全领域产生的问题也日益严峻。人工智能进攻性风险和网络威胁领域的发展正在重新定义企业安全,从而给企业带来了更高的挑战。如何守护网络安全,成为企业深化数字化…

CSDN第十一场竞赛

目录 1.比赛详情 2.竞赛详情 3.原题回顾 (1).圆小艺 思路模拟 代码实现 (2). K皇把妹 思路模拟 代码实现 (3).筛选宝物 思路模拟 代码实现 (4).圆桌 思路模拟 代码实现 4.总结 1.比赛详情 报名地址:https://edu.csdn.net/contest/detail/24?utm_sou…