enq: HW - contention
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相关推荐
- [20161208]等待事件enq: HW - contention
[20161208]等待事件enq HW - contention.txt --别人的系统遭遇enq: HW - contention,自己诊断遇到一点点小误区,实际上我看看我原来的帖子就知道问题在那 ...
- 等待事件之enq: HW - contention
等待事件之enq: HW - contention SELECT * FROM V$EVENT_NAME WHERE NAME IN ('enq: HW - contention ...
- oracle dump enq hw,经典故障分析 - ASSM引发的索引争用与 enq HW -contentio
作者介绍: 孙加鹏 云和恩墨技术顾问 六年Oracle技术顾问经验,所服务的行业包括电信运营商.金融业.制造业等. 擅长Oracle的故障诊断.高可用架构.升级迁移等.目前主要服务于上海金融类客户. ...
- 事务上的等待事件 —— enq: TM - contention
执行DML期间,为防止对与DML相关的对象进行修改,执行DML的进程必须对该表获得TM锁.若在获得TM锁的过程中发生争用,则等待enq: HW - contention 事件. SQL> sel ...
- oracle中ci是什么意思,enq: CI - contention(附AWR)
enq: CI - contention是个什么玩意? 一个库CI LOCK严重(ID1=1,ID2=5) 查了下,都是下面的语句引起的(字段太多了没设long了): SID SQL_ID ...
- 一次不常见的等待事件:RECO进程enq: DR - contention
某用户反映数据库中有一个账号的费用结算有问题,排查数据库状态,发现有一个不常见的等待事件,PROGRAM:oracle@db01 (RECO),EVENT:enq: DR - contention(阻 ...
- 关于enq: US – contention
US contention: Lock held to perform. DDL on the undo segment http://tech.sina.com.cn/s/2009-09-23/09 ...
- 【MW】Drop Materialized View Hangs with 'Enq: JI - Contention'
适用的数据库版本[Release 10.2 to 11.2] 事件:当运行DROP MATERIALIZED VIEW 时 会话hang住. 用下面命令生成跟踪文件(通过任意会话): 点击(此处)折叠 ...
- 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)...
[等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV - contention) [等待事件]序列等待事 ...
最新文章
- yolov3 onnx nms
- 前端工程师和设计师必读文章推荐【系列三十六】
- ubuntu 开发板ping通虚拟机挂载nfs服务器
- Windows7睡眠后自动唤醒
- 华为发布近2万元折叠屏手机Mate Xs;iPhone 12或支持WiFi新标;Electron 6.1.8发布 | 极客头条...
- 使用requests通过代码实现接口测试自动化
- TF2—tf.keras.layers.BatchNormalization
- linux运行关关采集器,杰奇远程采集教程linux下远程采集
- 常用公差配合表图_常用的机械测量工具竟然这么多?你知道几个?
- Windows API GetLastError()函数返回值含义解释
- 物联网流量池_如何搭建物联网卡流量池系统
- Web前端开发CSS学习笔记2—五大类选择器
- C语言学习笔记《带你学C带你飞》P41-P61
- Docker知识点整理
- DISM 修复 Win10
- 手撕包菜php,包菜怎么做爽脆不出水,教你简单小技巧,营养健康,家里人都喜欢...
- mysql delete in删除数据
- oracle 小游戏编程,C++实现扫雷经典小游戏
- php 购物车存在那个地方,php添加购物车
- Delphi 转载:万一博客中的“多线程”解读
热门文章
- 关于turtlebot仿真报错The majority of dropped messages were due to..... 修改记录
- ACW830. 单调栈
- 【算法】图像处理在医学领域的应用
- 网络安全——sql注入判断
- JAVA基础-06.集合-15.【Map】
- Multiplayer Moo[ [ 并查集+dfs连通块 ] / [ dfs ] ]
- 谨以此文提醒一下自己这几天又犯怠惰的毛病了,还要继续加油
- 10月11日 驱动开发
- 【BZOJ3407】[Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题【01背包】
- 嵌入式系统考试题库(CSU)