1.缓冲区管理器结构
共分为三层
第一层为缓冲区表层:存储buffer tag以及buffer tag与buffer id之间的关系。
第二层为缓冲区描述层:信息量最多,最重要的一层,记录了buffer id所对应的缓冲池的地点。
第三层为缓冲区池:专门存储数据缓冲区的内存块,缓冲池被分割成大小为8KB大小的插槽,等于页面大小。因此,每个槽可以存储整个页面。
2.缓冲区管理器的锁
PG缓冲区管理器为许多不同的目的使用许多锁。
锁是缓冲区管理器同步机制的一部分;它们和任何SQL语句和SQL选型都不相关。
在PG中,对象在内存中是并发被访问的(其实任何数据块都是),这个时候为了数据块不被破坏,就需要锁。
缓冲区表层的锁:
BufMappingLock:
缓冲区描述层的锁:
1.content_lock(内容锁):
一种典型的强制访问限制的锁,它可以用于共享和独占模式。
2.io_in_progress_lock():
3.spinlock
3.缓冲区管理器如何工作
(1)访问已存在缓冲区中的数据块
(2)加载数据块到空的缓冲池插槽
(3)加载数据块到一个需要释放的缓冲池插槽
4.缓冲区块替换机制
1.时钟扫描(8.1开始及以后的版本)
2.LRU(8.1以前的版本)