查清GES锁争用应直接查询v$ges_enqueue视图,重点关注REQUESTED≠GRANT_LEVEL的行(如REQUESTED='X'而GRANT_LEVEL='S'),并按RESOURCE_NAME分组定位热点;常见锁类型包括TX(事务行锁)、HW(高水位线锁)、US(undo段锁)、CF(控制文件锁)。
查清是哪类GES锁在争用
直接看 v$ges_enqueue,别只盯着 gv$session 的 blocking_session。这个视图能暴露跨实例的锁持有/请求状态,尤其关注 requested 和 grant_level 不一致的行——比如某行显示 requested = 'x'(排他),grant_level = 's'(共享),说明正卡在升级锁的路上。
常见锁类型含义:
-
TX:事务行锁,通常对应未提交的 DML 或 SELECT FOR UPDATE -
HW:高水位线锁,多见于并发 INSERT 触发段扩展 -
US:undo 段锁,可能指向 undo 表空间压力或长事务 -
CF:控制文件锁,少见,但一旦出现往往关联 ASM 或磁盘故障
执行 SELECT * FROM v$ges_enqueue WHERE REQUESTED != GRANT_LEVEL,按 RESOURCE_NAME 分组,快速定位热点资源。
区分 HW 锁和 TX 锁的误判陷阱
大量 gc buffer busy acquire 或 enq: HW - contention 等待,常被当成“慢 SQL”优化,实际是 HW 锁争用。它和 TX 锁表现相似,但根因完全不同:
- TX 锁争用:事务未提交、应用层死锁、SELECT FOR UPDATE NOWAIT 频繁重试
- HW 锁争用:多个实例同时推进同一表的高水位线,典型于日志表、流水表无分区、ASSM 段自动扩展节奏失控
验证方法:查 v$segment_statistics 中该表的 segment_header_gets 和 extent_requests 是否突增;再结合 AWR 报告里 “Segments by Global Cache Buffer Busy” 确认是否集中在少数几个段。
别碰 freelist——RAC 下它不仅无效,还会放大 HW 锁竞争。改用 STORAGE (INITIAL 8M NEXT 8M) 控制 extent 分配节奏,或对追加型表启用分区 + NOLOGGING APPEND,把 HWM 推进限制在子分区内部。
临时表空间和 Sequence 的隐性 GES 压力源
这两类问题不报明显 GES 锁名,但会持续触发 DFS 锁和全局协调,表现为 enq: TS - contention 或 enq: SQ - contention,本质仍是 GES 层面的资源争用。
临时表空间必须为每个实例独占 tempfile:
- 检查
dba_temp_files在每个实例上单独执行,确认status = 'ONLINE'且enabled = 'YES' - 路径必须带实例标识,如
+DATA/racdb_inst1/temp01.dbf,禁用 OMF 自动生成 -
DEFAULT_TEMP_TABLESPACE设置需逐实例运行ALTER DATABASE DEFAULT TEMPORARY TABLESPACE,gv$视图不反映本实例真实值
Sequence 必须调大 CACHE 并禁用 ORDER:
- 默认
CACHE 20在 RAC 下几毫秒就耗尽,引发高频seq$更新和 DFS 锁同步 -
ORDER会强制所有号段经由 master 实例分发,等于人为制造单点瓶颈 - 推荐起步值:
CACHE 200(适配每秒 200 行插入),批量场景可到CACHE 5000~20000
别跳过底层设施验证就调参数
看到 ORA-00600 [kjfsg_check_master_1] 或大量 gc cr block busy,第一反应不该是改 _gc_policy_time,而是立刻检查:
- 私网连通性:
ping -I <private_if><other_node_private_ip></other_node_private_ip></private_if>,延迟 >5ms 就危险 - ASM 磁盘组状态:
asmcmd lsdg确认全部为MOUNTED,查 alert.log 是否有ORA-15064 - CRS 健康:
crsctl check cluster -all和olsnodes -n必须全绿 - GES 主节点一致性:从 trace 文件提取
RESOURCE NAME和声称的MASTER NODE,再查gv$ges_resource中实际 master 是否匹配
很多所谓“GES 调优”,其实是网络抖动、存储延迟或磁盘离线被掩盖成锁争用。参数调整前,先让集群底座稳住。


















