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

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

本文简介:选择自 youbo2004 的 blog

    在执行truncate语句时,可以通过drop storage子句和reuse storage子句来控制被释放的区是否回收到表空间中。如何作在线系统的truncate,不希望表长时间锁住,那么可以使用reuse storage子句,仅将hwm重置。

 

4.3 free list优化

free list 竞争出现在多个进程使用同一个free list并试图同时修改free list头部数据块时。可以通过查询视图v$waitsate的class类型为data block 的记录来检查竞争情况。

产生data block类型竞争的主要原因是多个进程试图同时修改free list头部数据块。 然而,它也会出现在当进程准备将块读入buffer cathe时,另一个进程需要访问同一个块。如果能在v$session_wait中正好捕获buffer busy waits,就可以通过查询v$session_wait中的p3来判定是那一类。a 0 1014代表读类型,其他的值为修改竞争的类型。

   下一步需要确定竞争涉及那些段。 如果能够在v$session_wait捕获waits,就可以用p1和p2的值 (对应file 和 block) 在dba_extents中找到段名。 如何是一个表,就很可能需要重建表来创建更多的process freelists。 一种计算需要创建多少个freelist的方法是dump一些段中接近hwm的块,检查interested transaction list的个数,具体方法可参见3.1。interested transactions个数的峰值加1 就是需要的最小process freelists的值。

2.3和2.4可以看出,使用多个free list可能导致更多的空块未被使用, 也可能导致段更快地扩展。如果性能是当前所关心的重点,那么多free lists 可以用来提高并发访问能力,当然会增加一些额外空间的耗用。然而,如果空间使用大小是首先考虑的因素,那么推荐使用single freelist,使参数freelists=1, 当然就不能提升并发事务的性能了。

v$waitstat 也可显示其他类型class的竞争,包括segment headerfree list。 出现在同一个free list group中多个事务需要同时更新它们的free list header记录时。 有多种方法来解决这个问题如重建表采用更多的free list groups,或者增加 _bump_highwater_mark_count大小,或者调整应用本身。

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

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

go top