美文网首页大数据
Postgresql · 源码阅读 · 缓冲区管理器介绍

Postgresql · 源码阅读 · 缓冲区管理器介绍

作者: sinwaj | 来源:发表于2020-10-23 18:41 被阅读0次

一、背景

缓冲区管理器管理共享内存和持久化存储之间的数据传输,用于提升数据库系统的数据读/写效率。

二、缓冲区管理器结构

1.术语

缓冲表、缓冲区描述符、缓冲池(存放表和索引的页面,一个简单数组通过buffer_id进行索引)。

2.缓冲区标签

typedef struct buftag

{

RelFileNode rnode;/* physical relation identifier */

  ForkNumber forkNum;//0:关系表本体;1:空间映射fsm

BlockNumber blockNum;/* blknum relative to begin of reln */

}BufferTag;

typedef struct RelFileNode

{

Oid          spcNode;/* tablespace 表空间*/

  Oid          dbNode;/* database 数据库*/

  Oid          relNode;/* relation 关系表*/

}RelFileNode;

3、后端进程读取数据页面

i)当读取数据表或索引页时,后端进程向缓冲管理区发送请求(buffer_tag)。

ii)BufferManager返回一个buffer_id。如果缓冲池中不存在,则从持久化存储中加载到缓冲池,再返回buffer_id。

iii)后端进程通过buffer_id访问缓冲区。

4、页面置换法

当缓冲区满,且未包含请求页面,BufferManager采用时钟扫描算法逐出一个页面(受害页面),用于放置被请求的页面。

5、脏页刷盘

当页面发生修改(如元组增加、删除、修改),BufferManager通过检查点进程或后台写入器,完成脏页刷入存储。

三、核心代码

postgres\src\backend\storage\buffer\buf_table.c

postgres\src\backend\storage\buffer\bufmgr.c
postgres\src\backend\storage\buffer\freelist.c

相关文章

网友评论

    本文标题:Postgresql · 源码阅读 · 缓冲区管理器介绍

    本文链接:https://www.haomeiwen.com/subject/eptbmktx.html