1.今天发生一起enq: HW - contention引起的性能问题,记录一下:

2.查看enq: HW - contention有关的信息

select SAMPLE_TIME,MACHINE,SESSION_ID,BLOCKING_SESSION ,
SQL_ID,EVENT,TIME_WAITED,P1TEXT,P1,P2TEXT,P2,P3TEXT,P3
from dba_hist_active_sess_history where to_char(sample_time,'YYYY-MM-DD HH24:MI:SS') BETWEEN '2022-08-23 07:30:00' AND '2022-08-23 09:18:00' --and sql_id='7zkmy6p6ugy53'
AND event='enq: HW - contention'

结果:

3.其中p3参数是block address,我们可以使用dbms_utility工具去定位file_id与block号,进而定位object


select dbms_utility.data_block_address_file(p3) file_id,dbms_utility.data_block_address_block(p3) block# from (
select SAMPLE_TIME,MACHINE,SESSION_ID,BLOCKING_SESSION ,
SQL_ID,EVENT,TIME_WAITED,P1TEXT,P1,P2TEXT,P2,P3TEXT,P3
from dba_hist_active_sess_history where to_char(sample_time,'YYYY-MM-DD HH24:MI:SS') BETWEEN '2022-08-23 07:30:00' AND '2022-08-23 09:18:00' ---and sql_id='7zkmy6p6ugy53'
AND event='enq: HW - contention'
)

结果:

4.上述sql再套一层,定位object,发现是回滚段

select owner,segment_name from dba_extents a,
(select dbms_utility.data_block_address_file(p3) file_id,dbms_utility.data_block_address_block(p3) block# from (
select SAMPLE_TIME,MACHINE,SESSION_ID,BLOCKING_SESSION ,
SQL_ID,EVENT,TIME_WAITED,P1TEXT,P1,P2TEXT,P2,P3TEXT,P3
from dba_hist_active_sess_history where to_char(sample_time,'YYYY-MM-DD HH24:MI:SS') BETWEEN '2022-08-23 07:30:00' AND '2022-08-23 09:18:00' ---and sql_id='7zkmy6p6ugy53'
AND event='enq: HW - contention'
)) b
where b.file_id=a.file_id and b.block# between a.block_id and a.block_id+a.blocks

结果:

5.由于查出来是回滚段,file_id是2,我们再来看看回滚段的资讯

select file_id,file_name,bytes/1024/1024 bytes,maxbytes/1024/1024 maxbytes,autoextensible from dba_data_files where file_id=2

结果:

6.再看看目前回滚段的水位线

select tablespace_name, usedsize, freesize , autosize,used_per  from(select  /* + RULE */ allsize.tablespace_name,allsize.usedsize , allsize.freesize, NVL(aut.autosize ,0) autosize,Round((allsize.usedsize  -allsize.freesize) * 100 / (usedsize + NVL(aut.autosize ,0)) ) used_perFROM    (SELECT  df.tablespace_name                      tablespace_name ,ROUND(df.bytes / (1024 * 1024 * 1024),2)           usedsize,      ROUND(SUM(fs.bytes) / (1024 * 1024 * 1024 ),2)     freesize,Nvl(Round(SUM(fs.bytes) * 100 / df.bytes),1)       pused,Round((df.bytes - SUM(fs.bytes)) * 100 / df.bytes) pfreeFROM dba_free_space  fs,(SELECT tablespace_name,SUM(bytes) bytesFROM dba_data_files  GROUP BY tablespace_name) df  WHERE fs.tablespace_name (+)  = df.tablespace_name       AND df.tablespace_name   NOT IN ('SYSAUX','SYSTEM' )GROUP BY df.tablespace_name,df.bytes  ) allsize,(SELECT tablespace_name , ROUND(SUM((MAXBYTES-USER_BYTES)/(1024*1024*1024)),2)  autosize  from dba_data_files  WHERE  AUTOEXTENSIBLE ='YES' GROUP BY tablespace_name )  autwhere   aut.tablespace_name (+)  = allsize.tablespace_name     order by  used_per  desc)

结果:

这里,事情就明朗了,主要是由于dml操作,产生大量的undo,用户进程一直推高undo tablespace的水位线,oracle首先会使用已分派的free space,如果free space不够,才会从undo tablespace扩展新得free space(前提是autoextensible=y),假如无法扩展,它将重用expired的空间,之后才会使用unexpired的空间,甚至从其他undo segment steal(偷)expired或者unexpired空间
undo分派空间的机制可见这篇文章Oracle怎样重用已过期和未过期的 undo extent?

SELECT * FROM dba_hist_undostat WHERE TO_CHAR(BEGIN_TIME,'YYYY-MM-DD HH24:MI:SS')>='2022-08-23 07:30:00' AND TO_CHAR(END_TIME,'YYYY-MM-DD HH24:MI:SS')<='2022-08-23 09:30:00'


从上图中可以看出,已经开始偷了,所以先解除undotablespace 的size限制,设定为可以自动扩充

alter database datafile 2 autoextend on maxsize unlimited

另外,需要注意的是,如果enq:hw-contention发生在table,可以使用如下语法预分配

alter table TABNAME allocate extent

enq: HW - contention相关推荐

  1. [20161208]等待事件enq: HW - contention

    [20161208]等待事件enq HW - contention.txt --别人的系统遭遇enq: HW - contention,自己诊断遇到一点点小误区,实际上我看看我原来的帖子就知道问题在那 ...

  2. 等待事件之enq: HW - contention

    等待事件之enq: HW - contention SELECT *   FROM V$EVENT_NAME  WHERE NAME  IN        ('enq: HW - contention ...

  3. oracle dump enq hw,经典故障分析 - ASSM引发的索引争用与 enq HW -contentio

    作者介绍: 孙加鹏 云和恩墨技术顾问 六年Oracle技术顾问经验,所服务的行业包括电信运营商.金融业.制造业等. 擅长Oracle的故障诊断.高可用架构.升级迁移等.目前主要服务于上海金融类客户. ...

  4. 事务上的等待事件 —— enq: TM - contention

    执行DML期间,为防止对与DML相关的对象进行修改,执行DML的进程必须对该表获得TM锁.若在获得TM锁的过程中发生争用,则等待enq: HW - contention 事件. SQL> sel ...

  5. oracle中ci是什么意思,enq: CI - contention(附AWR)

    enq: CI - contention是个什么玩意? 一个库CI LOCK严重(ID1=1,ID2=5) 查了下,都是下面的语句引起的(字段太多了没设long了): SID SQL_ID       ...

  6. 一次不常见的等待事件:RECO进程enq: DR - contention

    某用户反映数据库中有一个账号的费用结算有问题,排查数据库状态,发现有一个不常见的等待事件,PROGRAM:oracle@db01 (RECO),EVENT:enq: DR - contention(阻 ...

  7. 关于enq: US – contention

    US contention: Lock held to perform. DDL on the undo segment http://tech.sina.com.cn/s/2009-09-23/09 ...

  8. 【MW】Drop Materialized View Hangs with 'Enq: JI - Contention'

    适用的数据库版本[Release 10.2 to 11.2] 事件:当运行DROP MATERIALIZED VIEW 时 会话hang住. 用下面命令生成跟踪文件(通过任意会话): 点击(此处)折叠 ...

  9. 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)...

    [等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV - contention) [等待事件]序列等待事 ...

最新文章

  1. yolov3 onnx nms
  2. 前端工程师和设计师必读文章推荐【系列三十六】
  3. ubuntu 开发板ping通虚拟机挂载nfs服务器
  4. Windows7睡眠后自动唤醒
  5. 华为发布近2万元折叠屏手机Mate Xs;iPhone 12或支持WiFi新标;Electron 6.1.8发布 | 极客头条...
  6. 使用requests通过代码实现接口测试自动化
  7. TF2—tf.keras.layers.BatchNormalization
  8. linux运行关关采集器,杰奇远程采集教程linux下远程采集
  9. 常用公差配合表图_常用的机械测量工具竟然这么多?你知道几个?
  10. Windows API GetLastError()函数返回值含义解释
  11. 物联网流量池_如何搭建物联网卡流量池系统
  12. Web前端开发CSS学习笔记2—五大类选择器
  13. C语言学习笔记《带你学C带你飞》P41-P61
  14. Docker知识点整理
  15. DISM 修复 Win10
  16. 手撕包菜php,包菜怎么做爽脆不出水,教你简单小技巧,营养健康,家里人都喜欢...
  17. mysql delete in删除数据
  18. oracle 小游戏编程,C++实现扫雷经典小游戏
  19. php 购物车存在那个地方,php添加购物车
  20. Delphi 转载:万一博客中的“多线程”解读

热门文章

  1. 关于turtlebot仿真报错The majority of dropped messages were due to..... 修改记录
  2. ACW830. 单调栈
  3. 【算法】图像处理在医学领域的应用
  4. 网络安全——sql注入判断
  5. JAVA基础-06.集合-15.【Map】
  6. Multiplayer Moo[ [ 并查集+dfs连通块 ] / [ dfs ] ]
  7. 谨以此文提醒一下自己这几天又犯怠惰的毛病了,还要继续加油
  8. 10月11日 驱动开发
  9. 【BZOJ3407】[Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题【01背包】
  10. 嵌入式系统考试题库(CSU)