Statspack之十三-Enqueue

原文出处:

http://www.eygle.com/statspack/statspack13.htm

enqueue是一种保护共享资源的锁定机制。该锁定机制保护共享资源,如记录中的数据,以避免两个人在同一时间更新 同一数据。enqueue
包括一个排队机制,即FIFO(先进先出)排队机制。

Enqueue等待常见的有ST、HW 、TX 、TM等

ST enqueue,用于空间管理和字典管理的表空间(DMT)的区间分配,在DMT中典型的是对于uet$和fet$数据字典表的 争用。对于支持LMT的
版本,应该尽量使用本地管理表空间. 或者考虑手工预分配一定数量的区(Extent),减少动态扩展
时发生的严重队列竞争。

我们通过一个实例来看一下:

 

 

 DB Name DB Id Instance Inst Num Release OPS Host------------ ----------- ------------ -------- ----------- --- ------------------DB 40757346 aaa 1 8.1.7.4.0 NO server Snap Id Snap Time Sessions ------- ------------------ -------- Begin Snap: 2845 31-10月-03 02:10:16 46 End Snap: 2848 31-10月-03 03:40:05 46 Elapsed: 89.82 (mins)对于一个Statspack的report,采样时间是非常重要的维度,离开时间做参考,任何等待都不足以说明问题。Cache Sizes~~~~~~~~~~~ db_block_buffers: 51200 log_buffer: 2097152 db_block_size: 16384 shared_pool_size: 209715200………..Top 5 Wait Events~~~~~~~~~~~~~~~~~ Wait % TotalEvent Waits Time (cs) Wt Time-------------------------------------------- ------------ ------------ -------enqueue 53,793 16,192,686 67.86rdbms ipc message 19,999 5,927,350 24.84pmon timer 1,754 538,797 2.26smon timer 17 522,281 2.19SQL*Net message from client 94,525 520,104 2.18 -------------------------------------------------------------在Statspack分析中,Top 5等待事件是我们最为关注的部分。这个系统中,除了enqueue 等待事件以外,其他4个都属于空闲等待事件,无须关注。我们来关注一下enqueue等待事件,在89.82 (mins)的采样间隔内,累计enqueue等待长达16,192,686cs,即45小时左右。这个等待已经太过显著,实际上这个系统也正因此遭遇了巨大的困难,观察到队列等待以后,我们就应该关注队列等待在等待什么资源。快速跳转的Statspack的其他部分,我们看到以下详细内容:Enqueue activity for DB: DB Instance: aaa Snaps: 2716 -2718-> ordered by waits desc, gets descEnqueue Gets Waits---------- ------------ ----------ST 1,554 1,554 -------------------------------------------------------------我们看到主要队列等待在等待ST锁定,对于DMT,我们说这个等待跟FET$,UET$的争用紧密相关。我们在回过头来研究捕获的SQL语句:-> End Buffer Gets Threshold: 10000-> Note that resources reported for PL/SQL includes the resources used by all SQL statements called within the PL/SQL code. As individual SQL statements are also reported, it is possible and valid for the summed total % to exceed 100 Buffer Gets Executions Gets per Exec % Total Hash Value--------------- ------------ -------------- ------- ------------ 4,800,073 10,268 467.5 51.0 2913840444select length from fet$ where file#=:1 and block#=:2 and ts#=:3 803,187 10,223 78.6 8.5 528349613delete from uet$ where ts#=:1 and segfile#=:2 and segblock#=:3 and ext#=:4 454,444 10,300 44.1 4.8 1839874543select file#,block#,length from uet$ where ts#=:1 and segfile#=:2 and segblock#=:3 and ext#=:4 23,110 10,230 2.3 0.2 3230982141insert into fet$ (file#,block#,ts#,length) values (:1,:2,:3,:4) 21,201 347 61.1 0.2 1705880752select file# from file$ where ts#=:1…. 9,505 12 792.1 0.1 1714733582select f.file#, f.block#, f.ts#, f.length from fet$ f, ts$ t where t.ts#=f.ts# and t.dflextpct!=0 and t.bitmapped=0 6,426 235 27.3 0.1 1877781575delete from fet$ where file#=:1 and block#=:2 and ts#=:3我们看到数据库频繁操作UET$,FET$系统表已经成为了系统的主要瓶颈。至此,我们已经可以准确的为该系统定位问题,相应的解决方案也很容易确定,在8.1.7中,使用LMT代替DMT,这是解决问题的根本办法,当然实施起来还要进行综合考虑,实际情况还要复杂得多。

 
HW enqueue指和段的高水位标记相关等待;手动分配适当区可以避免这一等待。

TX是最常见的enqueue等待。TX enqueue等待通常是以下三个问题之一产生的结果。
第一个问题是唯一索引中的重复索引,你需要执行提交(commit)/回滚(rollback)操作来释放enqueue。
第二个问题是对同一位图索引段的多次更新。因为单个位图段可能包含多个行地址(rowid),所以当多个用户试图更新同一段时,可能一个
用户会锁定其他用户请求的记录,这时等待出现。直到获得锁定的用户提交或回滚, enqueue释放。
第三个问题,也是最可能发生的问题是多个用户同时更新同一个块。如果没有足够的ITL槽,就会发生块级锁定。通过增大initrans和/或
maxtrans以允许使用多个ITL槽(对于频繁并发进行DML操作的数据表,在建表之初就应该考虑为相应参数设置合理的数值,避免系统运行
以后在线的更改,在8i之前,freelists等参数不能在线更改,设计时的考虑就尤为重要),或者增大表上的pctfree值,就可以很容易的避免
这种情况。
TM enqueue队列锁在进行DML操作前获得,以阻止对正在操作的数据表进行任何DDL操作(在DML操作一个数据表时,其结构不能被更改)。

 

本文作者:
eygle,Oracle技术关注者,来自中国最大的Oracle技术论坛itpub.
www.eygle.com是作者的个人站点.你可通过Guoqiang.Gai@gmail.com来联系作者.欢迎技术探讨交流以及链接交换.

原文出处:

http://www.eygle.com/statspack/statspack13.htm

时间: 2016-02-09

Statspack之十三-Enqueue的相关文章

statspack 使用实例

--1.´´½¨ perfstat ±í¿Õ¼ä create  tablespace  perfstat datafile  '/home/orapaid/oradata/prdyp/perfstat.dbf'  size 500m; --2.ÒÑsysµÇ½ִÐÐÏÂÁнű¾@/home/orapaid/product/92/rdbms/admin/catdbsyn.sql@/home/orapaid/product/92/rdbms/admin/dbmspool.sql --3.Ô

Enqueue (队列等待)

原文转自:http://www.dbtan.com/2010/05/enqueue.html Enqueue是一种保护共享资源的锁定机制.该锁定机制保护共享资源,以避免因并发操作而损坏数据,比如通过锁定保护一行记录,避免多个用户同时更新.Enqueue采用排队机制,即FIFO(先进先出)来控制资源的使用. 在Oracle 10g之前,Enqueue事件是一组锁定事件的集合,如果数据库中这个等待事件比较显著,我们还需要进一步来追踪是哪个类别的锁定引发了数据库等待. 从Oracle 10g开始,Or

Systemwide Tuning using STATSPACK Reports [ID 228913.1]

Systemwide Tuning using STATSPACK Reports [ID 228913.1]   修改时间 09-MAR-2012     类型 BULLETIN     状态 ARCHIVED   Systemwide Tuning using StatsPack Reports PURPOSE This article is a reference to understand the output generated by the STATSPACK utility. Si

【等待事件】等待事件系列(5.1)--Enqueue(队列等待)

[等待事件]等待事件系列(5.1)--Enqueue(队列等待)   1  BLOG文档结构图   2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Enqueue队列等待 ② Enq数据字典 ③ enq: AE - lock ④ enq: MR锁 ⑤ enq: DX - contention ⑥ enq: SQ - contention 序列等待     2.2  相关参考文章链接 [推

Silverlight & Blend动画设计系列十三

Silverlight & Blend动画设计系列十三:三角函数(Trigonometry)动画之飘落的雪花(Falling Snow) 平时我们所看到的雪花(Falling Snow)飘飘的效果实际上也是一个动画,是由许多的动 画对象共同完成的一个界面效果.对于不同大小的雪片可以通过缩放变换(ScaleTransform )功能特性确定,雪片飘落是存在于一个空间之中,通过不同的透明度值可使雪花看上去具 有一定的空间视觉,雪花的飘落过程是由三角函数的原理实现的左右滑落效果,并可根据随 机生成数字

走近VB.Net(十三) VB.Net问答全集

走近VB.Net(十三) VB.Net问答全集 VB.Net中文站 http://vbnetcn.126.com hejianzhong 最近老是有人问一些重复的问题,我就想到把他们汇总起来,现在用VB.Net太少,资料更少.问的人也不多,这 些都是从全国的讨论组收集的,有一部份来自-[VB.Net中文站讨论组]http://my.6to23.com/vbnetcn/bbs/BBS2index.htm. 一些是我回答的,有一些是一些较早研究VB.Net的网友回答的,因为是探讨的阶段,可能会有一些

Statspack之初体验

呵呵,今晚之前从来没有做过Statspack(好像有点丢人).这几天一个数据库实在被折磨得不行了,明明sga_max_size有1.5G,但是实际看整个实例才用了200+M内存,慢得要死,频繁读写硬盘,偏偏硬盘又不是磁盘阵列,IO狂慢,唉,痛苦啊.于是决定花点时间学下实例优化,今天打印了几页Performance Tuning Guide的文档,读了读关于Statspack的内容,在自己的笔记本上做了试验,其实还是很容易的.首先运行%ORACLE_HOME%\RDBMS\ADMIN PCREAT

Statspack之十四-"log file sync" 等待事件

原文出处: http://www.eygle.com/statspack/statspack14-LogFileSync.htm 当一个用户提交(commits)或者回滚(rollback),session的redo信息需要写出到redo logfile中.用户进程将通知LGWR执行写出操作,LGWR完成任务以后会通知用户进程.这个等待事件就是指用户进程等待LGWR的写完成通知. 对于回滚操作,该事件记录从用户发出rollback命令到回滚完成的时间. 如果该等待过多,可能说明LGWR的写出效率

statspack报告数据结果解释

数据 这篇文章来自于oracle中国用户组(www.oracle.com.cn)的文章,发现对自己学习性能调优很有帮助: 原文链接:http://www.cnoug.org/viewthread.php?tid=25353 statspack报告数据结果解释 本人将最近在学习性能调优时,所用笔记总结如下,欢迎批评指正本文将不断更新,欢迎补充.(所列数据仅用于便于说明,没有实际意义) 一.statspack 输出结果中必须查看的十项内容 1.负载间档(Load profile)2.实例效率点击率(