管理表空间中的空间

空间管理在多个级别进行。第一,将空间分配给表空间。这通过设置数据文件的大小来完成。第二,将表空间中的空间分配给段,这通过分配区间来完成。第三,将段中的空间分配给行,这通过维护那些跟踪每个块中的空闲空间量的位图来完成。

5.3.1 区间管理

区间管理方法为每个表空间设置,应用于表空间中的所有段。可以使用两种技术来管理区间的使用:字典管理或本地管理。它们的区别泾渭分明:始终应该应该使用本地管理,决不要使用字典管理。字典管理只是先前版本的遗物而已。

字典区间管理在数据字典中使用两个表。SYS .UET$具有描述已用的区间的行,而SYS.FET$具有描述可用区间的行。第当数据库需要为段分配区间时,它必须搜索FET$来查找适当的可用空间位,然后针对FET$和UET$执行DML操作将其分配给段。这种机制会带来严重的性能问题,因为数据库中的所有空间管理操作必须在构建事务的代码上序列化。。

在创建本地管理的表空间时,一个重要的选项是uniform size。如果指定了此选项,那么,在表空间中分配的每个区间将使用此大小。这极大地提高了空间管理效率,因为每个位覆盖的块范围可以更大:每个区间只需一位。考虑下在的语句:

create tablesspace large tabs datafile 'large tabs_01.dbf' size 10g

extent management local uniform size 160m;

分配在表空间的每个区间为160MB,帮将有64个。位图只需要64位区间,而只需更新一位即可分配160MB的空间。如果表空间中的段很大,这将十分有效。如果创建的段只需要寥寥数行的空间,它仍获得160MB的区间。小对旬需要自己的表空间:

create tablesapce small_tabs datafile 'small_tabs_01.dbf' size 1g

extent management local uniform size 160k;

替代(默认)语法如下:

create tablespace any_tabs datafile 'any_tabs_01.dbf' size 10g

extent management local autoallocate;

在表空间中创建段时,ORACLE 将分配一个64K的区间。随着段的增长,将需要更多区间,ORACLE 最多可分配16个64KB的区间,此后,将分配渐进式增大的区间。通常在不断增加的块中为快速增长的段提供区间。

oracle 公司建议使用autoallocate,但如果您知道段的大小,也可以相应地放置它们,UNIFORM SIZE 理当是最佳选项。

如果数据库从先前版本升级而来,则可能包括字典管理的表空间。请使用查询对此进行检查:

select tablespace_name,extent_management from dba_tablespaces;

请使用下面的PL\SQL程序,将任何字典管理的表空间转换为本地管理。

execute dbms_space_admin.tablespace_migragte_to_local('tablespacename');

将表空间转换为本地管理非常便捷,但SYSTEM表空间除外,SYSTEM表空间要求执行一些附加步骤,系统管理员的产品文档对此做了详细说明

5.3.2管理段空间

管理段空间的方法为每个表空间设置,应用于表空间中的所有段。可使用两种技术来管理段空间的使用:手动和自动。它们的区别泾渭分明:应该使用自动管理,决不要使用手动管理。

要查看任何表空间是否在使用手动管理,请运行此查询:

select tablespace_name,segment_space_management form dba_tablespaces;

无法将表空间从手动段空间管理转换为自动管理空间管理。唯一的解决方案是使用自动段管理方法新建表空间,将段移入其中,并删除旧的表空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值