广告
返回顶部
首页 > 资讯 > 数据库 >Oracle Study中Oracle等待事件怎么用
  • 367
分享到

Oracle Study中Oracle等待事件怎么用

2024-04-02 19:04:59 367人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“oracle Study中Oracle等待事件怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Oracle Study中Oracl

这篇文章主要为大家展示了“oracle Study中Oracle等待事件怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Oracle Study中Oracle等待事件怎么用”这篇文章吧。

Oracle Study之--Oracle等待事件

什么是enqueue

enqueue可以做名词,也可以做动词来解释。做名词时,指的的是一种的类型,比如Tx enqueue。做动词时,则是指将锁请求放入到请求队列的操作。

我们知道,lock是一种需要排队的锁实现机制,这和latch是不一样的,latch是一种轻量级的锁,是不需要排队得。Enqueue就是lock的排队机制的实现。

lock是用来实现对于共享资源的并发访问的。如果两个session请求的lock是兼容的,则可以同时锁定资源,如果两个session请求的lock是不兼容的,则其中一个session必须等待另外一个session释放其持有的lock后,才能获得对共享资源的锁定。这时,等待的session的lock请求就需要进入到一个队列当中,这就是enqueue等待。

什么是enqueue resource

Lock有三种可能的状态:已获得,转换或者等待。对于某一个lock,可能一些session已经获得该lock,某些session请求转换,也有某些session在请求持有但无法成功而导致等待。所以,对于一个lock,需要三个队列来描述这些session的状态。这个三个队列,分别称为Owner,waiter和convert队列,由一个结构来管理,就是enqueue resource。

enqueue是有名字的,其名字就是对应的lock的类型加上ID1,ID2参数构成,形如<TYPE-ID1-ID2>。Enqueue resource的结构,其头部是该enqueue的名字,然后就是指向三个队列的指针。

通过v$resource视图可以查看当前系统中的enqueue。

由于系统中有很多类型的lock同时存在,那么enqueue resource结构实际上是一个数组,其长度由隐含参数_enqueue_resources控制,也就是说,该参数控制了系统中可同时存在的lock的数量。如果超过,则会报以下错误:
ORA-00052: "maximum number of enqueue resources exceeded"

通过v$resource_limit视图可以查看系统中各种资源的利用情况。

什么是enqueue lock

enqueue lock就是lock本身。oracle使用了和enqueue reouserce分离的另外一个数组来管理enqueue lock,这个数组的长度由隐含参数_enqueue_locks控制。

通过视图v$enqueue_lock可以查看该数组中的具体内容。

什么是enqueue hash

通过上面关于enqueue resource的描述,我们可以知道,oracle查找一个lock时,需要先在enqueue resource数上查找到该lock的位置。

如果每次都在数组上顺序查找,显然效率较低。我们知道hash是一种高效的查找算法,所以oracle对于enqueue resource的查找也采用了hash方式,引入了一个hash数组,其大小由隐含参数_enqueue_hash控制。

通过对enqueue的名字<TYPE-ID1-ID2>进行hash计算,得到的结果就是某个enqueue resource在hash数组中的位置,也就是定位到了具体的hash bucket。如果多个enqueue resource的hash值相同,则在同一个bucket中形成一个链表

相应的,为了保护这个hash数组,需要引入一个latch:enqueue hash chain。该latch有若干个子latch,由隐含参数_enqueue_hash_chain_latches控制

什么是enqueue freelist

同样的,对于enqueue resource数组中的空闲位置,需要通过一个freelist列表来管理,这样每次在请求新的位置时,不至于要扫描整个数组。enqueue freelist由enqueues latch的保护。

实际上,enqueue resource的Hash管理方式,和buffer cache/library cache的管理方式非常的相像。如果想更深入的了解enqueue hash,resource和lock,可以dump出具体的结果看看:

alter session set events ’immediate trace name enqueues level 3’;

Enqueue

Enqueue 这个词其实是lock 的另一种描述语。

当我们在AWR 报告中发现长时间的enqueue 等待事件时,说明数据库中出现了阻塞和等待,可以关联AWR报告中的enqueue activity部分来确定是哪一种锁定出现了长时间等待。

这个等待事件有2个参数:

Name: enqueue 的名称和类型。

Mode: enqueue的模式。

可以使用如下SQL 查看当前会话等待的enqueue名称和类型

SELECT event,  CHR (TO_CHAR (BITAND (p1, -16777216)) / 16777215)
         || CHR (TO_CHAR (BITAND (p1, 16711680)) / 65535)
            "Lock",
         TO_CHAR (BITAND (p1, 65535)) "Mode"
  FROM   v$session_wait
 WHERE   event like 'enq%';

Oracle 的enqueue 包含以下模式:

模式代码               解释
1                      Null (NULL)
2                      Row-S(SS)
3                      Row-X(SX)
4                      Share(S)
5                      S/Row-X(SSX)
6                      Exclusive(X)

Oracle的enqueue 有如下类型:

Enqueue 缩写      缩写解释
BL                Buffer Cache management
BR                Backup/Restore
CF                Controlfile transaction
CI                Cross-instance Call Invocation
CU                Bind Enqueue
DF                Datafile
DL                Direct Loader Index Creation
DM                Database Mount
DR                Distributed Recovery Process
DX                Dirstributed Transaction
FP                File Object
FS                File Set
HW                High-water Lock
IN                Instance Number
IR                Instance Recovery
IS                Instance State
IV                Library Cache Invalidation
JI                Enqueue used during AJV snapshot refresh
JQ                Job Queue
KK                Redo Log “Kick”
KO                Multiple Object Checkpoint
L[A-p]            Library Cache Lock
LS                Log start or switch
MM                Mount Definition
MR                Media recovery
N[A-Z]            Library Cache bin
PE                Alter system set parameter =value
PF                PassWord file
PI                Parallel slaves
PR                Process startup
Parallel slave synchronization
Q[A-Z]        Row Cache
RO            Object Reuse
RT            Redo Thread
RW            Row Wait
SC            System Commit Number
SM            SMON
Sequence Number
SQ            Sequence Number Enqueue
SR            Synchronized replication
Sort segment
ST            Space management transaction
SV            Sequence number Value
TA            Transaction recovery
TC            Thread Checkpoint
TE            Extend Table
TM            DML enqueue
TO            Temporary Table Object Enqueue
TS            Temporary Segement(also TableSpace)
TT            Temporary Table
TX            Transaction
UL            User-defined Locks
UN            User name
US            Undo segment, Serialization
WL            Being Written Redo Log
XA            Instance Attribute Log
XI             Instance ReGIStration Lock

案例分析:

12:54:01 SYS@ prod>conn scott/tiger
Connected.
12:54:05 SCOTT@ prod>select * from tab;
TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
DEPT1                          TABLE
EMP                            TABLE
SALGRADE                       TABLE
T1                             TABLE
6 rows selected.
12:54:09 SCOTT@ prod>grant all on dept1 to tom;
Grant succeeded.
Elapsed: 00:00:00.37
12:54:23 SCOTT@ prod>update dept1 set dname='beijing' where deptno=10;
2 rows updated.
Elapsed: 00:00:00.04
12:54:41 SCOTT@ prod>rollback;
Rollback complete.
Elapsed: 00:00:00.03
12:55:22 SCOTT@ prod>update dept1 set dname='NetWork' where deptno=10;
2 rows updated.
Elapsed: 00:00:00.02
12:54:51 SYS@ prod>conn tom/tom
Connected.
12:54:56 TOM@ prod>update scott.dept1 set loc='hongkong' where deptno=10;
12:59:18 SYS@ prod>col event for a50
12:59:26 SYS@ prod>r
  1  SELECT event,  CHR (TO_CHAR (BITAND (p1, -16777216)) / 16777215)
  2           || CHR (TO_CHAR (BITAND (p1, 16711680)) / 65535)
  3              "Lock",
  4           TO_CHAR (BITAND (p1, 65535)) "Mode"
  5    FROM   v$session_wait
  6*  WHERE   event like 'enq%'
EVENT                                              Lock Mode
-------------------------------------------------- ---- ----------------------------------
enq: TX - row lock contention                      TX   6
Elapsed: 00:00:00.01
13:22:48 SYS@ prod>select a.ORACLE_USERNAME,a.SESSION_ID,b.TYPE,b.LMODE,b.REQUEST,b.block,o.object_name from v$locked_object a,v$lock b,dba_objects o
  2*  where a.session_id=b.sid and a.object_id=o.object_id
ORACLE_USERNAME                SESSION_ID TY      LMODE    REQUEST      BLOCK OBJECT_NAM
------------------------------ ---------- -- ---------- ---------- ---------- ----------
SCOTT                                  42 TX          6          0          1 DEPT1
TOM                                    38 TM          3          0          0 DEPT1
SCOTT                                  42 TM          3          0          0 DEPT1
TOM                                    38 TX          0          6          0 DEPT1
TOM                                    38 AE          4          0          0 DEPT1
SCOTT                                  42 AE          4          0          0 DEPT1
6 rows selected.

以上是“Oracle Study中Oracle等待事件怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle Study中Oracle等待事件怎么用

本文链接: https://www.lsjlt.com/news/64909.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle Study中Oracle等待事件怎么用
    这篇文章主要为大家展示了“Oracle Study中Oracle等待事件怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Oracle Study中Oracl...
    99+
    2022-10-19
  • Oracle Study之--Oracle等待事件(5)
    Oracle Study之--Oracle等待事件(5) Db file single write这个等待事件通常只发生在一种情况下,就是Oracle 更新数据文件头信息时(比如发生Checkpo...
    99+
    2022-10-18
  • Oracle Study之--Oracle等待事件(3)
    Oracle Study之--Oracle等待事件(3)Db file parallel read这是一个很容易引起误导的等待事件,实际上这个等待事件和并行操作(比如并行查询,并行DML)没有关系。 这个事...
    99+
    2022-10-18
  • Oracle Study之--Oracle等待事件(4)
    Oracle Study之--Oracle等待事件(4) Db file scattered read这个等待事件在实际生产库中经常可以看到,这是一个用户操作引起的等待事件,当用户发出每次I/O需...
    99+
    2022-10-18
  • Oracle Study之--Oracle等待事件(2)
    Oracle Study之--Oracle等待事件(2)Control file parallel write当数据库中有多个控制文件的拷贝时,Oracle 需要保证信息同步地写到各个控制文件当中,这是一个...
    99+
    2022-10-18
  • Oracle Study之--Oracle等待事件(7)
    Oracle Study之--Oracle等待事件(7) Free buffer waits    当一个会话将数据块从磁盘读到内存中时,它需要到内存中找到空闲的内存空间来存放...
    99+
    2022-10-18
  • Oracle Study之-- enq:SQ contention等待事件
    Oracle Study之-- enq:SQ contention等待事件通过AWR Report发现“enq:SQ contention”等待事件:应用环境:转自:http://www.xuebuyuan...
    99+
    2022-10-18
  • Oracle Study之--resmgr:cpu quantum等待事件
    Oracle Study之--resmgr:cpu quantum等待事件在AWR Report中出现“resmgr:cpu quantum”等待事件:“resmgr:cpu quantum”等待事件:参考...
    99+
    2022-10-18
  • 怎么理解oracle等待事件enq
    这篇文章主要讲解了“怎么理解oracle等待事件enq”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解oracle等待事件enq”吧!Enqueue ...
    99+
    2022-10-18
  • Oracle中有哪些等待事件
    这篇文章给大家介绍Oracle中有哪些等待事件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待...
    99+
    2022-10-18
  • Oracle local write wait等待事件
    Note 1:         TypicallyDBWR has to free up some buffers when ...
    99+
    2022-10-18
  • oracle等待事件之enq: CF – contentio
    Enqueue 是一种保护共享资源的锁定机制,避免因并发操作而损坏数据,Enqueue 采用排队机制,即 FIFO(先进先出)来控制资源的使用。在任何需要读取控制文件的动作时,就会发生等待事件enq: CF...
    99+
    2022-10-18
  • Oracle 等待事件之 free buffer waits
    free buffer waits官网解释:    This wait event indicates that a server process was unabl...
    99+
    2022-10-18
  • Oracle 等待事件之 buffer busy waits
    buffer busy waits (热块儿争用)官网解释:    This wait indicates that there are some buffers i...
    99+
    2022-10-18
  • Oracle等待事件之enq: TM – contention
    执行DML 期间,为防止对与DML 相关的对象进行修改,执行DML 的进程必须对该表获得TM 锁。 P1 = name|mode P2 = object # P3 = table/partition ...
    99+
    2022-10-18
  • oracle等待事件之free buffer waits
    1.什么时候会发生free buffer waits呢?     简单来说,当需要在buffer cache中寻找可用块但是找不到时,就会发生这个等待。找寻可用块的理由包括...
    99+
    2022-10-18
  • ORACLE的buffer busy wait等待事件怎么解决
    本文小编为大家详细介绍“ORACLE的buffer busy wait等待事件怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“ORACLE的buffer busy wait等待事件怎么解决”文章能帮...
    99+
    2022-10-19
  • Oracle面试宝典-等待事件篇
    Oracle 面试宝典 - 等待事件篇 请问Oracle 数据库中等待事件的作用是什么 一、等待事件由来 因为指标体系的发展,才导致等待事件的引入。总结一下,Oracle 的指标体系...
    99+
    2022-11-30
    oracle 事件 宝典
  • Oracle 等待事件之 db file sequential read
    db file sequential read:官网解释:This event signifies that the user process is reading a buffer into the SG...
    99+
    2022-10-18
  • Oracle 等待事件之 db file parallel read
    db file parallel read官网解释:    This happens during recovery. It can also happen duri...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作