postgresql存储引擎源码分析一
PostgreSQL的存储系统作为PostgreSQL的最低层,向下通过操作系统系统接口访问物理数据,向上为存取系统提供由缓冲区页面及页面上的接口函数。 存储系统的总体架构如下图所示(转自贵州大学硕士黄崇争毕业论文“开放源代码DBMS的分析,比较”) 注释:Lock Manager是锁管理器,IPC是进程间通信,他们实现了存取层对存储层的互斥访问,操作。 存储系统各子系统功能如下: Page Manager:对缓冲区页面的结构进行定义并提供页面的相关操作。 Buffer Manager:对共享缓冲区和本地缓冲区进行管理。 Storage Manager:屏蔽不同物理设备接口函数的差异,向Buffer Manager提供统一的接口。 File Manager:一般的操作系统只允许一个进程打开256个文件,而PostgreSQL服务器在工作时需要打开的文件会很多,因此,其使用File Manager来封装操作系统文件读写的函数。 下面对Page Manager的一段代码进行分析:Page Manager模块的功能上面已经讲到过,这里便不再赘述,这个模块主要由三个文件组成:源码根目录下的backendstoragepage路径下的bufpage.c,itemptr.c,以及根目录下includestorage路径的头文件bufpage.h组成。 页面Page的结构大致如下:页面由页首部,页面存储记录的ID,存储的记录以及特殊空间所组成。其中,页面首部定义在bufpage.h文件中。如下所示:
typedef struct PageHeaderData typedefPageHeaderData *PageHeader; 下面来分析/backend/storage/page/bufpage.c中的PageInit函数(页面初始化) void PageInit(Page page,Size pageSize,Size specialSize) { PageHeaderp = (PageHeader) page; specialSize = MAXALIGN(specialSize);//MAXALIGN是常量表达式 Assert(pageSize == BLCKSZ);//如果页面大小和磁盘块大小相等的话,函数终止,页面初始化失败 MemSet(p,pageSize);//讲页首部初始化,清零。 p->pd_lower = SizeOfPageHeaderData;//初始化页面空闲区域起始偏移量 } 今天就分析到这里,希望大家给出意见,给予改正,谢谢! 姓名:鲁笛 主题:存储系统之缓冲区页面描述 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |