溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Oracle Study中Oracle等待事件怎么用

發(fā)布時間:2021-11-11 10:15:38 來源:億速云 閱讀:132 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章主要為大家展示了“Oracle Study中Oracle等待事件怎么用”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Oracle Study中Oracle等待事件怎么用”這篇文章吧。

Oracle Study之--Oracle等待事件

什么是enqueue

enqueue可以做名詞,也可以做動詞來解釋。做名詞時,指的的是一種鎖的類型,比如Tx enqueue。做動詞時,則是指將鎖請求放入到請求隊列的操作。

我們知道,lock是一種需要排隊的鎖實現(xiàn)機制,這和latch是不一樣的,latch是一種輕量級的鎖,是不需要排隊得。Enqueue就是lock的排隊機制的實現(xiàn)。

lock是用來實現(xiàn)對于共享資源的并發(fā)訪問的。如果兩個session請求的lock是兼容的,則可以同時鎖定資源,如果兩個session請求的lock是不兼容的,則其中一個session必須等待另外一個session釋放其持有的lock后,才能獲得對共享資源的鎖定。這時,等待的session的lock請求就需要進入到一個隊列當(dāng)中,這就是enqueue等待。

什么是enqueue resource

Lock有三種可能的狀態(tài):已獲得,轉(zhuǎn)換或者等待。對于某一個lock,可能一些session已經(jīng)獲得該lock,某些session請求轉(zhuǎn)換,也有某些session在請求持有但無法成功而導(dǎo)致等待。所以,對于一個lock,需要三個隊列來描述這些session的狀態(tài)。這個三個隊列,分別稱為Owner,waiter和convert隊列,由一個結(jié)構(gòu)來管理,就是enqueue resource。

enqueue是有名字的,其名字就是對應(yīng)的lock的類型加上ID1,ID2參數(shù)構(gòu)成,形如<TYPE-ID1-ID2>。Enqueue resource的結(jié)構(gòu),其頭部是該enqueue的名字,然后就是指向三個隊列的指針。

通過v$resource視圖可以查看當(dāng)前系統(tǒng)中的enqueue。

由于系統(tǒng)中有很多類型的lock同時存在,那么enqueue resource結(jié)構(gòu)實際上是一個數(shù)組,其長度由隱含參數(shù)_enqueue_resources控制,也就是說,該參數(shù)控制了系統(tǒng)中可同時存在的lock的數(shù)量。如果超過,則會報以下錯誤:
ORA-00052: "maximum number of enqueue resources exceeded"

通過v$resource_limit視圖可以查看系統(tǒng)中各種資源的利用情況。

什么是enqueue lock

enqueue lock就是lock本身。oracle使用了和enqueue reouserce分離的另外一個數(shù)組來管理enqueue lock,這個數(shù)組的長度由隱含參數(shù)_enqueue_locks控制。

通過視圖v$enqueue_lock可以查看該數(shù)組中的具體內(nèi)容。

什么是enqueue hash

通過上面關(guān)于enqueue resource的描述,我們可以知道,oracle查找一個lock時,需要先在enqueue resource數(shù)上查找到該lock的位置。

如果每次都在數(shù)組上順序查找,顯然效率較低。我們知道hash是一種高效的查找算法,所以oracle對于enqueue resource的查找也采用了hash方式,引入了一個hash數(shù)組,其大小由隱含參數(shù)_enqueue_hash控制。

通過對enqueue的名字<TYPE-ID1-ID2>進行hash計算,得到的結(jié)果就是某個enqueue resource在hash數(shù)組中的位置,也就是定位到了具體的hash bucket。如果多個enqueue resource的hash值相同,則在同一個bucket中形成一個鏈表。

相應(yīng)的,為了保護這個hash數(shù)組,需要引入一個latch:enqueue hash chain。該latch有若干個子latch,由隱含參數(shù)_enqueue_hash_chain_latches控制

什么是enqueue freelist

同樣的,對于enqueue resource數(shù)組中的空閑位置,需要通過一個freelist列表來管理,這樣每次在請求新的位置時,不至于要掃描整個數(shù)組。enqueue freelist由enqueues latch的保護。

實際上,enqueue resource的Hash管理方式,和buffer cache/library cache的管理方式非常的相像。如果想更深入的了解enqueue hash,resource和lock,可以dump出具體的結(jié)果看看:

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

Enqueue

Enqueue 這個詞其實是lock 的另一種描述語。

當(dāng)我們在AWR 報告中發(fā)現(xiàn)長時間的enqueue 等待事件時,說明數(shù)據(jù)庫中出現(xiàn)了阻塞和等待,可以關(guān)聯(lián)AWR報告中的enqueue activity部分來確定是哪一種鎖定出現(xiàn)了長時間等待。

這個等待事件有2個參數(shù):

Name: enqueue 的名稱和類型。

Mode: enqueue的模式。

可以使用如下SQL 查看當(dāng)前會話等待的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等待事件怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI