空闲空间映射的目的是快速定位一个页,该页具有足够的空闲空间来保存要存储的元组;或者确定不存在这样的页面,并且关系必须扩展一个页面。在PostgreSQL 8.4
中,每个关系表都有自己的、可扩展的空闲空间映射(FSM),存储在其关系表的单独“fork
”中。这消除了以前固定大小FSM的缺点。
保持Map小是很重要的,这样可以快速搜索。因此,我们不试图记录页面上确切的空闲空间。我们为每个页面分配一个映射字节,允许我们以页面的1/256
粒度记录空闲空间。另一种说法是,存储的值是可用空间除以BLCKSZ/256
(向下舍入)。
我们假设空闲空间必须总是小于BLCKSZ
,因为所有页面都有一些开销;所以最大的映射值是255
。
为了帮助快速搜索,Map
不是简单的逐页条目数组,而