用Oracle分段空间管理功能改进数据库性能

www.net130.com     日期:2013-8-12    浏览次数:
作者:Matthew Morris 译者:曾少宁    出处:TechTarget中国

如果Oracle数据库表出现大量碎片数据,则会浪费磁盘空间和严重影响性能。这时可以使用Oracle分段空间管理功能,特别是Oracle数据库分段压缩功能。

更新或删除表的记录,会在数据块中形成许多的空白空间。一些空白空间会被后来插入的记录重用。然而,删除和插入的大小差别会产生极小的碎片空间,以至它们永远也不会被再使用。此外,在一个已经删除大量记录的表中,表分段将在高位线下包含大量的稀疏(或空白)块。这样会大大降低全表扫描的效率。

在线分段压缩功能是Oracle分段空间管理的首选方法,它会回收分段中高位线之下的碎片空闲空间。在线分段压缩操作不同于ALTER TABLE、INDEX或CLUSTER命令的DEALLOCATE UNUSED子句。解除分配操作会直接释放分段中高位线之上的空闲空间。压缩分段会整合高位线之下的碎片空闲空间和压缩数据。高位线将向下移,回收的空间将会释放。在压缩操作执行之后,分段的数据将保存到较少的块中。这样可以优化缓存使用率,并且减少全表扫描时要读取的块数。

使用分段压缩的Oracle分段空间管理

分段压缩可以在使用表的工作时间执行。它不会影响DML操作或查询,也不需要额外的磁盘空间。在压缩操作结束时,并发DML操作将会暂停一小段时间,这段时间将用于释放一些空间。分段的所有索引都会在压缩操作期间保持不变。在操作完成之后,它们一样保持不变。

压缩操作会在物理上将数据文件的记录移到新位置。要实现这个操作,必须使用ALTER TABLE.ENABLE ROW MOVEMENT命令,启用对象的记录移动。然后,还需要禁用分段中所有基于记录ID的触发器。此外,压缩操作只能在本地管理且启动自动分段空间管理的表空间的分段上执行。在线分段压缩不支持以下几种分段类型:压缩表、IOT表、SecureFile LOB、有若干功能索引的表及有基于ID的物化视图的表。

要分析在线压缩分段是否会提高分段的运行效率,最简单方法是使用Segment Advisor。Segment Advisor会检查自动负载库的使用率和增长统计信息,并从分段提取抽样数据,从而确定可以回收空间的分段。默认情况下,分析工具会在维护时间内作为一个自动化维护任务执行。此外,它也可以手动执行。如果分析工具发现一个分段可以回收大量的空闲空间,那么它会建议执行一次在线分段压缩操作。如果对象不适合执行分段压缩操作,那么它会建议在线重新定义表(也称为重组)。执行在线重定义的最终结果与在线分段压缩很相似。然而,重定义操作在执行过程中需要使用额外的磁盘空间。

Oracle分段空间管理工作可以压缩表、索引表、索引、分区、子分区、物化视图或物化视图日志的空间。这个操作的执行方式是:在各种ALTER语句(例如,ALTER TABLE、ALTER INDEX、ALTER MATERIALIZED VIEW或ALTER MATERIALIZED VIEW LOG)中使用SHRINK SPACE子句。此外,SHRINK SPACE子句还有两个可选关键字,它可以控制压缩操作的行为:

COMPAT – 在子句中指定这个参数,就会把压缩分段操作分布两个阶段。数据库会整理分段空间的碎片,压缩表的记录,但是压缩操作不会重置高位线或释放空间。这个参数通常用在一些没有长查询操作的数据库,这些表查询可能会跨越多个操作,它们会试图从回收块中读取数据。在数据库活动较少的时候,数据库会执行第二个SHRINK SPACE操作完成整个过程,但是这一次命令不带COMPAT关键字。
CASCADE – 这个参数会让分段压缩操作在对象的所有独立分段上执行。例如,压缩一个表时添加CASCADE,就会在表的所有索引上执行分段压缩操作。
关于ALTER TABLE、ALTER INDEX、ALTER MATERIALIZED VIEW和ALTER MATERIALIZED VIEW LOG语句和SHRINK SPACE子句的语法和限制,请参见Oracle数据库SQL语言参考文档。

 

分享道
相关新闻