HW高水位问题及解决办法

文章探讨了应用业务中数据库响应缓慢的问题,主要由enq:HW-contention等待事件引起。通过分析发现,CLOB字段的插入操作导致空间竞争。给出了短期和长期的解决方案,包括手动扩展lob字段空间、调整表空间设置和优化隐含参数等。
摘要由CSDN通过智能技术生成

一、问题描述及分析

应用业务反馈应用响应缓慢。登录数据库检查,发现数据库响应慢,有大量enq:HW–contention等待事件。结合awr报告和ash报告,发现整体等待时间消耗在推高水位线征用上,如下awr top事件:

Ash消耗也是enq:HW–contention

检查enq:HW–contention的sql语句,发现集中在三条语句上,如下:

这三条语句是:

INSERT INTO CPOE_ORD_CA_SYSTEM_REL ( UNIQUE_ID, ORDER_ID, CA_CHECK_DATA, STAMP, ORDER_STATUS, OPERATION, SOURCE, URID ) VALUES( :1 , :2 , :3 , :4 , :5 , :6 , :7 , :8 )

INSERT INTO SDE_LOB_MEDICALRECORD ( LOB_ID, LOB_CONTENT, MODIFY_DATE, REMARK ) VALUES( :1 , :2 , :3 , :4 )

UPDATE SDE_LOB_MEDICALRECORD SET LOB_CONTENT=:1 , MODIFY_DATE=:2 WHERE LOB_ID=:3 

经检查,该等待事件发生的表主要是CPOE_ORD_CA_SYSTEM_REL、SDE_LOB_MEDICALRECORD,这两个表均有CLOB字段,检查9点到10点的awr信息,其中消耗最高的CPOE_ORD_CA_SYSTEM_REL表插入244次,次数也不算多,但平均每次执行平均要消耗392.05秒,表信息中除了lob,其他占用量都不大的,消耗时间情况如下:

检查表空间IO情况:

表空间io延迟较高,一般正常情况下在8ms以内,不排除大lob插入导致io开销增加。

HWM理解:
Oracle 数据库通过跟踪段中的块状态来管理空间。 高水位标记 (HWM) 是段中的一个点,超过该点的数据块是未格式化和未使用过的。

“enq:HW–contention”理解:
HW enqueue用于管理高水位以上的空间分配。通常在执行insert操作时,当高水位线以下block不够用时,Oracle将会推进高水位线。当有多个进程在同时进行insert操作时,容易引起高水位线争用,主要表现为“enq: HW – contention”。

二、解决方案

短期解决方案:
手动扩展该表lob字段空间:
ALTER TABLE <lob_table> MODIFY LOB (<column_name>) (allocate extent (size ));
如:

ALTER TABLE CPOE_ORD_CA_SYSTEM_REL MODIFY LOB (STAMP) (allocate extent (size 10g));

该扩展相当于提前推动水位线,扩展区extent和段的空间,上面我提前分配了10G,正常情况下是用不够了才去推动扩展的,可以通过dba_extents视图查看

select * from dba_extents where segment_name=‘SYS_LOB0000234080C00004$$’

当前情况一次分配是64M,如果插入lob比较大的情况,可能会造成多次扩展还是不够。

长期解决方案:
(1)在对应业务高峰期前,提前手动allocate new空间。
ALTER TABLE <lob_table> MODIFY LOB (<column_name>) (allocate extent (size ));
(2)对该表所在的表空间设置更大的UNIFORM SIZE,使得每次allocate更多extent到表的HWM之上,避免高水位线争用时等待表空间的extent分配。
(3)设置隐含参数_bump_highwater_mark_count,该隐含参数可以控制HWM每次推进的block个数。
(4)检查IO子系统性能。 IO性能的变化也会导致空间分配缓慢,进而引发等待。

  • 35
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值