当前位置: 首页 > news >正文

Buffer Pool

Buffer Pool

  • 概念
  • free链表
  • flush链表
  • LRU链表
  • chunk

概念

MySQL在启动时向操作系统申请的一片连续的内存,默认128M。然后将这块内存分为一个一个缓冲页(16KB,因为页就是16KB的)。再为每个缓冲页创建对应的控制块用于管理。比如第一次查询数据之后,数据库中对应的数据页就加载到缓冲页,第二次查询就不用去数据库了,直接内存查到返回。

free链表

由空闲的缓冲页的控制块组成的链表,新增的时候就在这里面找空闲的内存

flush链表

由修改过的缓冲页(脏页)的控制块组成的链表。
:那什么时候将脏页数据同步到数据库呢?
:1、后台线程根据系统的繁忙程度,定时从flush链表刷新一部分到磁盘
2、当加载数据到缓冲池,发现没有空闲缓冲页时;先看LRU链表尾部是否有非脏页控制块(用户读取 的有可能是未刷新到磁盘上的脏页);也没有的话,会强制刷新LRU链表最后一个对应的缓冲页
3、后台线程定时扫LRU链表尾部的一些缓冲页控制块,发现脏页就刷新磁盘

LRU链表

用户查询过的缓冲页的控制块组成的链表,最新访问的在最前面。所以分为热区和冷区(37%)

在这里插入图片描述
:但是预读与全表扫描会破坏这种设计,怎么做呢?
:其实二者的整个过程分 加载和读两个过程,二者都会加载,加载的时候都是加载到冷区的头部。而预读不一定会读,但全表扫一定会读,所以提供了判断全表扫的规则:即当前后访问一个页的时间间隔<1000ms(默认),数据就不会去加载到热区

chunk

chunk和buffer pool都允许有多个,用完一个chunk再用下一个

http://www.lryc.cn/news/287814.html

相关文章:

  • jetson-inference----docker内运行分类任务
  • Python脚本之操作Redis Cluster【二】
  • 认识数学建模
  • 计算机工作原理解析和解剖(基础版)
  • 外网ssh远程连接服务器
  • 滴滴基于 Ray 的 XGBoost 大规模分布式训练实践
  • k8s从入门到实践
  • Qt5.12.0 与 VS2017 在 .pro文件转.vcxproj文件
  • 金蝶云星空 ServiceGateway RCE漏洞复现
  • 二叉树的最大深度[简单]
  • [Redis]不同系统间安装redis服务器
  • Unity之动画和角色控制
  • C语言库函数实现字符串转大小写
  • hcip----ospf
  • vue中如何写过滤器
  • c语言-文件的读写操作(下)
  • android学习笔记----SQLite数据库
  • 开发知识点-Flutter移动应用开发
  • 视频尺寸魔方:分层遮掩3D扩散模型在视频尺寸延展的应用
  • openssl3.2/test/certs - 061 - other@good.org not permitted by CA1
  • 如何实现无公网ip远程访问本地websocket服务端【内网穿透】
  • pip清华源怎么换回来
  • [Go]认识Beego框架
  • JWT登录
  • MySQL和Redis的事务有什么异同?
  • 【C#】基础巩固
  • 基于Skywalking开发分布式监控(一)
  • 高防服务器什么意思
  • C/C++ - Auto Reference
  • springboot项目快速引入knife4j