2008年(239)
分类: Oracle
2008-06-18 00:01:13
用户创建表时可以指定表的空间尺寸,系统根据此设置为表分配磁盘空间。然而一般来说,由于无法预知有多少数据要存入表中,也就不能预测一个表需要多大的磁盘空间,从而无法在创建表时进行磁盘空间的分配。大多数情况下,表的空间分配在需要时进行。当向表中插入数据时,如果没有可用空间,系统就根据扩充的大小,为表分配新的磁盘空间。
用户使用SQL语句操作表,在长时间地对表进行增加、修改、删除操作之后,表的记录以及磁盘空间使用会出现以下的情况:
(1)表中存在记录的转移
表中的一条记录被更改之后,记录的长度可能会增加,以至于无法在当前页存放该记录。在这种情况下,系统将会寻找一个新的页,将整个记录存放在这一新页上,而在该记录的原有页上存放记录的指针,指向新页。
系统在访问被转移的记录时,需要两次的页读取。从原有页中获得新页的指针,再找到需要的记录。如果表中存在大量的记录转移,则会由于额外的I/O操作而影响系统的性能。
(2)表的数据页中存在未回收空间
表中的记录被删除或者记录被更改而长度缩短时,数据页中就会出现空闲空间。如果对表频繁进行删除或者导致记录缩短的更改,则未回收空间可能积累到一定的程度而削弱系统性能。
(3)表中的扩充不连续
一个表空间可以为多个表所使用,系统在表需要时才为它分配磁盘空间。在运行一段时间之后,一个表可能包含很多个扩充,这些扩充在空间上并不连续。表的这种不连续磁盘空间使用,会严重影响表扫描等大数据量的处理。