通过对表的管理进行Oracle数据库优化


1 表分区


在大量数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理.在大型的企业应用或企业级的数据库应用中,要处理的数据量通常可以达到几十到几百GB.有的甚至可以达到TB级。虽然存储介质和数据处理技术的发展也很快.但仍然不能满足用户的需求,为了使用户大量的数据在读写操作和查询中速度更快.Oracle提供了对表和索引进行分区的技术,以改善大型应用系统的性能。


2 碎片整理

 

当要满足一个空间要求时,数据库不再合并相邻的自由范围(除非别无选择),而是寻找表空间中最大的自由范围来使用。这样将逐渐形成越来越多的离散的、分隔的、较小的自由空
间,即碎片。随着时间推移,基于数据库的应用系统的广泛使用,产生的碎片会越来越多将对数据库有以下两点主要影响:


(1)导致系统性能减弱


当要满足一个空间要求时,数据库将首先查找当前最大的自由范围,而“最大”自由范围逐渐变小,要找到一个足够大的自由范围已变得越来越困难.从而导致表空间中的速度障碍,
使数据库的空间分配越发远离理想状态:


(2)浪费大量的表空间


尽管有一部分自由范围(如表空间的pctincrease为非0)将会被SMON(系统监控)后台进程周期性地合并,但始终有一部分自由范围无法得以自动合并,浪费了大量的表空间。为了消除区间交叉将静态的或只有小增长的表放置在一个表空间中,而把动态增长的对象分别放在各自的表空间中在create table、create index、create tablespace、create cluster时.在storage子句中的参数的合理设置,可以减少碎片的产生。


3.行链接(Row chaining)与行迁移(Row Migration)


当一行的数据过长而不能插入一个单个数据块中时.可能发生两种事情:行链接(row chaining)或行迁移(row migration):
(1)行链接
当第一次插入行时,由于行太长而不能容纳在一个数据块中时,就会发生行链接。在这种情况下,oracle会使用与该块链接的一块或多块数据块来容纳该行的数据。行连接经常在插入比较大的行时才会发生,如包含long,long row,lob等类型的数据。在这些情况下行链接是不可避免的。
(2)行迁移
当修改不是行链接的行时,当修改后的行长度大于修改前的行长度,并且该数据块中的空闲空间已经比较小而不能完全容纳该行的数据时,就会发生行迁移。注意,即使发生了行迁移.发生了行迁移的行的rowid还是不会变化.这也是行迁移会引起数据库I/0性能降低的原因。
Oracle在大多数情况下,行链接是无法克服的。当在不同的表中有大量的链接行.并且哪些表的行的长度不是很长时,你可以通过用更大的block size重建数据库的方法来解决它。行迁移主要是由于设置的PCTFREE参数过小.导致没有给update操作留下足够的空闲空间引起。为了避免行迁移,所有被修改的表应该设置合适的PCTFREE值,以便在每个数据块内为数据修改保留足够的空间。可以通过增加PCTFREE值的办法来避免行迁移,但这种解决办法是以牺牲更多的空间为代价的,这也就是我们通常所说的以空间换效率。而且通过增加PCTFREE值的办法只能缓解行迁移现象.而不能完全解决行迁移,所以较好的办法是在设置了合适的PCTFREE值的后,在发现行迁移现象比较严重时,对表的数据进行重组。