如果当前page已经满了,此时某些record如果变长,长到当前page装不下,这种情况下,就会产生overflow record, 此时DB2
会根据SMAP的信息,把变长后的record存到别的page上。
此时index entry里存的RID不变,而base page会存overflow RID。做个实验
OVERFLOW之前page的镜像
Data page还有6个字节的free space,因此可以通过update语句把第一条记录搞长点,让record overflow到其他page 上去。overflow之前 RID 是6-01。
执行
UPDATE SYSADM.TBINPBG
SET C1='BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBB'
WHERE C2='2018-04-13-07.41.26.280880';
Overflow后page的镜像
可以看出overflow后,index entry上存的RID没变(依然是6-01),但是对应的base record已经是个hole了,
在prefix-subrecord里存了OVERFLOW RECORD的位置7-5E,然后record就OVERFLOW到7-5E上去了。
这样每overflow一次,访问overflow record就要多一次I/O,因此会影响效率。