Oracle队列锁: Enqueue HW

简介:

HW真的是个著名的enqueue lock,著名度仅次于TM、TX吧。对于有高并发INSERT的OLTP数据库的DBA而言,HW enqueue真实家常便饭的等待事件。但是对于该等待事件的详细说明却少之又少。 这里我们总结一下这个HW enqueue lock。   这里我们仅讨论high water mark高水位队列锁的相关信息以及其常见使用和争用场景。   虽然造成HW enqueue contention争用的根本原因多种多样,但本质上HW enqueue总是只在数据段segment的High Water Mark高水位线需要移动时才被持有,最常见的情形莫过于一顿并发猛烈地INSERT操作。 HW enqueue根本存在目的是为了串行化对segment高水位线的移动以及回收lob segment中的空间。 已删除的LOB CHUNK在LOB INDEX中得到维护,以达到一致性读的目的;当LOB SEGMENT中的free space即将耗尽时则会则会从LOB INDEX中回收已提交的空闲空间。在持有HW enqueue的情况下Oracle操作从LOB INDEX移动free space到LOB本身SEGMENT的操作。   对于HW enq往往能采取以下的措施 1. 在segment扩展时,_bump_highwater_mark_count隐藏参数指出了单次高水位上涨的块数,但是该隐藏参数将影响整个DB。 2. 通过ATLER TABLE allocate extent (instance X)为指定实例、指定表预分配extent是另一种备选的解决HW enqueue的方案,而且该方案较为安全 3. 也建议检查表上的freelist 、fresslist group设置,若设置得过高,则可能由于格式化所有移动到freelist中的数据块而导致segment hw持有很长一段时间 4. 若在lob space回收期间发生该HW enq问题,则考虑检查LOB的pctversion配置。基于实际使用情况你可以设置pctversion为0或更小之避免空间回收,默认值为10%   不管是LMT本地管理还是DMT字典管理表空间总是要求在扩展数据段segment时持有HW enqueue。虽然在LMT上这种持有周期更短,但这仍是一个串行化的扩展过程。   



本文转自maclean_007 51CTO博客,原文链接:http://blog.51cto.com/maclean/1277698

相关文章
|
监控 Oracle 安全
Oracle数据库用户频繁被锁问题原因排查及解决
由于应用环境下Oracle用户总是频繁被锁,经常不能执行数据库事务操作,严重影响了系统运行效率。通过问题原因分析及排查,发现了原因,在此记录一下。
3937 0
Oracle数据库用户频繁被锁问题原因排查及解决
|
11月前
|
运维 Oracle 关系型数据库
Oracle优化02-锁和阻塞
Oracle优化02-锁和阻塞
84 0
|
SQL Oracle 关系型数据库
Oracle 锁表查询及解锁kill进程
1. 查看被锁定的表 SELECT OBJECT_NAME, MACHINE, S.SID, S.
2728 0
|
SQL Oracle 关系型数据库
|
Oracle 关系型数据库 网络协议
|
Oracle 关系型数据库 Windows
oracle 锁与等待
1. 查看引起等待的死锁 SELECT 'Lock' "Status", a.username "用户名", a.
582 0
|
Oracle 关系型数据库 SQL
oracle 表级锁
表级锁 共享模式(in share mode) 共享更新模式(in share update mode) 排他锁模式 锁定表的通用语法: lock table 表名 in ; ...
750 0
|
8天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
48 7