为了能够让数据页中容纳更多的行(记录)以及表空间中容纳更多的数据页,DB2 V9引入了一种新的行指针(RID,行指示器)格式。数据页标记由3个字节增加到4个字节,槽位由1个字节增加到2个字节,这种6字节的RID格式最终将表空间大小上限扩充到原来的32倍。即4KB页的表空间最大容量为2TB,32KB页的表空间最大容量为16TB。同时,每个数据页所能容纳的行数理论上也扩大为65000多行,但由于规定每一行的最小长度为12B左右,所以,实际上4KB页能容纳的最大行数为4KB/12KB=341行左右,32KB页则是2300行左右。
下表是4种页实际用于存储数据的空间大小和实际允许存放的行数:
这种RID格式很好的解决了表空间大小受限以及数据页空间浪费(不再受制于槽号,而是行长度)的问题。但同时也带来了管理上的挑战,比如备份和恢复。事实上,当表开始增长到TB级的时候,就应该考虑使用一些诸如表分区,数据库分区等技术来进行大型数据量的管理了。
使用旧的4字节RID格式的表空间就是常规表空间,使用新的6字节RID格式的表空间就是大型表空间了。DB2 V9中大型表空间是DMS表空间的默认类型,当然也可以显式的创建常规表空间(指明表空间为REGULAR)。很显然,SMS表空间是不可能支持大型表空间的。
支持6字节RID格式的表空间包括:系统临时表空间,用户临时表空间,用户常规表���间。也就是说,只有系统表空间是不能创建为大型表空间的。因为目前的编目表不足以达到能够及时保证较大的表空间大小的状态。
大型表空间在DB2 V9之前叫长型表空间,用于存储长型或 LOB 表列,以弥补常规表空间在处理长型或LOB数据上的不足。
常规表空间向大型表空间的迁移
DB2 V9不会自动将常规表空间升级为大型表空间,但是可以手动升级:ALTER TABLESPACE tablespacename CONVERT TO LARGE。
ALTER命令不会物理地改变表空间的结构,只是改变了编目方式以指示表空间可以支持6字节的RID格式。要注意的是:
1.执行LARGE升级后需要立即COMMIT WORK,进行事务提交,否则表空间上会持有排它锁,同时在该表空间中对表所做的其他工作不会继续执行,直到该锁解除为止。
2.一旦表空间被修改为LARGE,为了更好的利用6字节RID的优势,还需要继续数据重组和索引重组。如果不进行索引重组,那么先前存在的表将延续每页255行以及3字节数量的限制,因为索引使用的仍是旧的RID,无法索引到超出原范围的页。而数据重组(表重组)与索引重组的影响不同,索引重组影响表空间中页的数量,表重组影响的是页中存放的行数。