表空间的使用
◆表空间碎片的产生
由于同一个表空间中存放有多个数据段,各个数据段可以有不同的区片尺寸,不同段的区片可以交叉存放;当这些段中的区片经过分配(如创建表)、释放(如删除表)后,就可能使表空间中原本连续的空闲数据块变成不连续,而区片必须由连续的数据块构成,这时,当某一段需要分配新的区片时,就有可能出现虽然表空间空闲数据块的总和大于所需区片的大小,但却无法找到一串连续的块来供此区片分配使用。
这种情况就称为表空间的Extent Fragmentation。我们经常会遇到这种情况,明明从DBA_FREE_SPACE中计算表空间还有几百MB,但其中的某一个表却无法再扩展几个MB的空间。
◆消除表空间碎片
Oracle在段的区片分配上为用户提供了很大的灵活性,然而如果未能正确使用创建表空间和数据对象的各个可选择参数,则在最后将不可避免的要面对区片碎片的问题。
Oracle 的Bhaskar Himatsingka 和 Juan Loaiza,为此提出了SAFE(Simple Algorithm for Fragmentation Elimination。)配制规则,通过遵循这套规则,区片级碎片可以完全的避免。
而实际上,Oracle8i引入的新特性:Local Managed Tablespace就是SAFE规则在Oracle Server的内置实现。SAFE原则概括起来包括:
1。 对每个表空间上的段使用相同的区片尺寸;段参数INITIAL=NEXT,PCTINCREASE=0;可以通过使用Create Tablespace 的‘ MINIMUM EXTENT’ 子句来确保分配的区片是此参数的倍数;
2。
仅在表空间级指定INITIAL、NEXT参数,在创建数据段时不要指定这些参数;
3。
区片的大小根据段大小来确定,原则是均衡顺序扫描的效率和空间的利用率,同时确保段的区片数目控制在1024之下;根据此原则,在进行相应测试之后,确定以下区片选取规则:
段大小(Oracle7)
区片大小(Oracle7)
段大小(Oracle8)
区片大小(Oracle8)
&160M
160K
&128M
128K
160M-5G
5M
128M-4G
4M
&5G
160M
&4G
128M
有此数据库中可以只使用三种区片大小的表空间;在对象创建之前需对其大小进行评估,并放到相应的表空间中;。
全部