首页 > 其他分享 >buffer pool如何管理page页

buffer pool如何管理page页

时间:2023-09-05 15:01:57浏览次数:39  
标签:buffer list free 节点 链表 dirty page pool

要了解 buffer pool 如何管理 page 页,首先要了解 page 页的分类

Page页的分类

page 页根据状态可以分为三种类型,如下图:

buffer pool如何管理page页_控制块

  • free page:空闲 page,未被使用过
  • clean page:被使用 page,数据没有被修改过
  • dirty page:脏页,被使用的 page,数据被修改过。数据和磁盘数据不一致

Page页如何管理

针对三种不同类型的 page 页,InnoDB 通过三种链表结构来维护和管理

free list -- 管理 free page

  • free list:表示空闲缓冲区,管理 free page
  • free 链表是把所有空闲的缓冲页对应的控制块作为一个个的节点放到一个链表中,这个链表便称之为 free 链表
  • 基节点: free链表中只有一个基节点是不记录缓存页信息(单独申请空间),它里面就存放了free链表的头节点的地址,尾节点的地址,还有free链表里当前有多少个节点。
  • 当一个控制块所指定的页被使用,那么这个控制块将会被移除
  • 当一个页空闲出来了,会新增一个控制块记录这个页

buffer pool如何管理page页_数据_02

flush list -- 管理 dirty page

  • 表示需要刷新到磁盘的缓冲区,管理 dirty page,内部时间按照修改时间排序
  • InnoDB 引擎为了提高处理效率,在每一次修改缓冲页之后,并不是立刻把修改同步到磁盘上,而是在未来的某个时间点来进行刷新操作。
  • 所以需要使用flush list链表来存储脏页,凡是被修改过的缓冲区对应的控制块都会作为节点加入到 flush list链表中。
  • 其结构和 free list 相似

lru list -- 管理 clean page 和 dirty page

  • 缓冲区分为两个部分
  • midpoint 为基点
  • 前面的链表称为 new 列表区,存放经常访问的数据,占 63%
  • 后面的链表称为 old 列表区,存放较少使用的数据,占 37%

buffer pool如何管理page页_链表_03

标签:buffer,list,free,节点,链表,dirty,page,pool
From: https://blog.51cto.com/u_16079703/7372827

相关文章

  • MySql中 BufferPool 的基本概念介绍
    MySQL的BufferPool是MySQL数据库引擎用来缓存数据页(页是磁盘上的一块固定大小的数据单元)的内存区域。BufferPool在MySQL服务器启动时被初始化,然后在整个数据库生命周期中用于高效地管理数据库页的读取和写入。BufferPool是MySQL性能的关键组成部分之一,因为它可以显著减少与磁盘I......
  • Java常用四大线程池用法以及ThreadPoolExecutor详解(转)
    为什么用线程池?1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处-理效率2.线程并发数量过多,抢占系统资源从而导致阻塞3.对线程进行一些简单的管理在Java中,线程池的概念是Executor这个接口,具体实现为ThreadPoolExecutor类,学习Java中的线程池,就可以......
  • 如果您在集成H.265视频流媒体播放器EasyPlayer.js时遇到了"SourceBuffer"报错,您可以采
    EasyPlayer是由青犀视频公司推出的一款功能强大且高度开放的H.265视频流媒体播放器。它支持播放H.264和H.265视频格式,具有出色的稳定性和流畅的播放效果。此外,EasyPlayer还提供多个版本供用户选择,包括EasyPlayer-RTSP、EasyPlayer-Pro和EasyPlayer.js等版本。每个版本都具有自己的......
  • 【从0到1】用Github Pages和VuePress搭建博客
    写在前面优点:免费简单,上手快相比博客园和CSDN自定义程度高缺点:静态页面,缺少一些交互功能我选择了它是因为只是想用博客做记录,不想花时间自己写前端~GithubPages在GitHub里新建一个Repository,命名为[your_github_name].github.io,博客的网址就是这个啦~eg.这是我的......
  • Java - ThreadPoolExecutor线程池分析
    Java- ThreadPoolExecutor源码分析 1.为什么要自定义线程池首先ThreadPoolExecutor中,一共提供了7个参数,每个参数都是非常核心的属性,在线程池去执行任务时,每个参数都有决定性的作用。但是如果直接采用JDK提供的方式去构建,可见设置的核心参数最多就两个,这样就会导致对线程池......
  • 分页PageInterceptor
    依赖引入<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>xx.xx.xx</version></dependency>编码PageHelper.startPage()在查询前执行,设置Page放入ThreadLocal中/......
  • pg10 安装pageinspect插件
    1.切换到源码包的contrib路径下,ls插件名称cd/data/soft/PostGreSQL/postgresql-10.20/contrib/pageinspect编译该插件makegcc-Wall-Wmissing-prototypes-Wpointer-arith-Wdeclaration-after-statement-Wendif-labels-Wmissing-format-attribute-Wformat-security-fn......
  • 20230626 java.nio.CharBuffer
    介绍java.nio.CharBufferpublicabstractclassCharBufferextendsBufferimplementsComparable,Appendable,CharSequence,Readablechar缓冲区,内部是char[]APIstaticallocate分配wrap包裹publicgetputcompact压缩将缓冲区当前位置(position)与......
  • 20230626 java.nio.ByteBuffer
    介绍java.nio.ByteBufferpublicabstractclassByteBufferextendsBufferimplementsComparable最常用的Buffer子类APIstaticallocateDirect直接使用本地内存,而不是通过JVM堆空间allocatewrappublicgetputcompact压缩将缓冲区当前位置(positi......
  • 20230621 java.nio.Buffer
    介绍java.nio.BufferpublicabstractclassBuffer缓冲区都具有mark,可选的标记,用于重复一个读入或写出操作,默认-1position,读写位置,下一个值将在此进行读写,默认0limit,界限,超过它进行读写是没有意义的capacity,容量,它永远不能改变这些值满足下面的条件:0<=......