enq:hw-contention
为防止多个进程同时修改hwm而提供的锁称为hw锁.想要移动hwm的进程必须获得hw锁.若在获取hw锁过程中发生争用,则等待enq:hw-
contention事件.hw锁争用大部份是因大量执行insert所引发的,偶尔也会因大量执行update在回滚估中发生hw锁争用现象.若是
update,表中段的扩展的大小虽然不多,但在创建回滚数据的过程中,需要回滚段的急速扩张.hw锁争用是在段的急速空间扩张时普遍出现的等待现象,有
时也会引发严重的性能下降.
oracle 10g起添加了in-memory
undo功能.imu是将回滚数据存于共享池内的kti-undo区域的功能.kti-undo区域上存储的回滚数据会由oracle被转到
(flush)回滚段.因此从oracle
10g起,回滚段扩张引起的hw锁争用比之前版本有所减少,期待撤销块的读写工作减少会给整个系统带来改善性能的效果,但对于imu的性能问题还不被人所
知,imu被多个in-memory undo锁存器保护,为了使用相同kti-undo区域,在发生争用时等待latch:in memeory
undo latch事件.
减少hw锁争用的方法:
(1)oracle 9i起使用assm.大部份时候,assm保障令人满意的结果.
(2)无论哪个版本,均使用适当大小的区.一般推荐使用5m左右,但这不是绝对值.
(3)oracle 8i起使用lmt,若不是特殊情况,则使用uniform size的extent,使用充分大的extent.
了解hwm位置的方法有许多,最简单的方法是使用dbms_space.unused_space
enq:st-contention,enq:tt-contenttion
oracle 8i上使用dmt时,执行区分配之类的空间管理工作,oracle为同步相应工作而使用st锁.st锁在整个实例上只有一个.
特定时刻同时过多发生空间管理相关工作时,为实现同步,大部份会话等待获取st锁,因此发生性能下降.
oracle 8i起提供了减少st锁争用的三种方法:
(1)添加了lmt功能.
(2)扩大了tt锁的使用.对这前使用st锁的部份表空间相关的工作上会使用tt锁.tt锁与st锁不同,每个表空间都可以使用一个,所以比使用st锁时有减少争用的效果.
(3)引入临时表空间.
enq:us-contention
为了同步将回滚段联机或脱机的过程,执行该工作的服务器进程或后台进程应获得us锁.每个回滚段都分配一个us锁.若在获取us锁的过程中发生争用,则等
待enq:us-contention事件.服务器进程应在开始事务时分配回滚估,但如果不存在可用的回滚段时,应该创建新的回滚段或将脱机状态的回滚段
联机.事务变化频繁时,将回滚段联机的操作可能广泛发生us锁争用.
一般系统上,突然将许多回滚段联机的情况不多,因此us锁争用一般不经常发生.但是如果因系统上事务的修改量较大,而us锁争用持续发生,就要指定执行如下的10511事件.10511事件起到阻止smon将回滚段脱机的作用.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28539951/viewspace-1264951/
,如需转载,请注明出处,否则将追究法律责任。