下面开始对pgsql源码中缓冲区进行一个简单的分析,目的指在弄懂缓冲区的实现方式,以及如何在这个方式上面实现其他的LRU替换算法
ps:找到一篇优秀的博客,专门讲pgsql中缓冲区部分的代码
http://blog.sina.com.cn/s/articlelist_1221155353_0_4.html
1、首先pgsql来看下源码目录
pgsql中的缓冲区分为两个部分,一个部分是本地缓冲区,用来缓冲一些临时结果文件,例如Query execution plans查询的临时文件。
第二个部分是共享缓冲区,共享缓冲区存放表数据和索引数据。
PostgreSQL中缓冲区管理主要分为共享缓冲区和管理和本地缓冲区管理两大部分,其中本地缓冲区结构以及管理方法主要定义在文件pgsql/src/backend/storage/buffer/localbuf.c中,在文件最开始的注释里写道:本地缓冲区管理器对临时表进行快速的缓冲区管理,这些临时表从来不需要被记录日志或者设检查点。因此我们可以知道本地缓冲的创建和维护主要是为了对数据库系统运行过程中产生的临时关系表进行管理。
2、两个缓冲区分为两个部分
首先对本地的缓冲区进行分析,因为本地的缓冲区是缓冲一些查询的临时文件,所以不存在日志写的问题,那么实际缓冲区的算法就是最简单的时钟置换的方法。