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

日期: 2013-08-05 作者:Matthew Morris翻译:曾少宁 来源:TechTarget中国 英文

如果Oracle数据库表出现大量碎片数据,则会浪费磁盘空间和严重影响性能。这时可以使用Oracle分段空间管理功能,特别是Oracle数据库分段压缩功能。 更新或删除表的记录,会在数据块中形成许多的空白空间。一些空白空间会被后来插入的记录重用。

然而,删除和插入的大小差别会产生极小的碎片空间,以至它们永远也不会被再使用。此外,在一个已经删除大量记录的表中,表分段将在高位线下包含大量的稀疏(或空白)块。这样会大大降低全表扫描的效率。 在线分段压缩功能是Oracle分段空间管理的首选方法,它会回收分段中高位线之下的碎片空闲空间。

在线分段压缩操作不同于ALTER TABLE、INDEX或CLUSTER……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

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语言参考文档。

翻译

曾少宁
曾少宁

TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。

相关推荐