Oracle Freelist和HWM原理探讨及相关性能优化[17]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 youbo2004 的 blog

4.1.1

    如果在alter table ... deallocate unused语句中使用了keep关键字,则可以在hwm之后保留指定大小的空闲空间,比如:

    alter table t1 deallocate unused keep 10k;

回收后t1的存储示意如图4.1.2

4.1.2

 

4.2删减表

    根据3.2.1可以得到hwm以下块的使用情况。如何p大于时,对全表扫描性能会产生影响,同时也会耗用空间。

如果能够确认应用有良好的索引几乎不会用到全表扫描,那么high water mark以下的空块,尽管耗费了空间,不会对访问产生影响。如果不能确定,那么就需要考虑删减表。

    删减表的操作将删除表中所有的记录,并且重置hwm标记。表在删减之后将成为一个空表。

    在oracle中删减表只有如下的两种办法:

1.使用drop语句

    先使用drop语句删除整个表,然后再重建这个表。在删除-重建的过程中,与表相关的所有索引、完整性约束以及触发器都会丢失,并且所有依赖于该表的对象都会变为invalid状态,同时原来争对表的授权也会失效。因此采用这种方式删除表中的记录代价太大。

 

2.使用truncate语句

    truncate语句属于ddl语句,不会产生任何回退信息,并且被立即自动提交。在执行truncate语句时不会影响到与被删减表相关的任何数据库对象与授权,也不会触发表中所定义的触发器。此外,在对标进行删减时,hwm将重置,已经为表分配的存储空间将被回收。

本文关键:Oracle Freelist和HWM原理探讨及相关性能优化
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top