中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Oracle Study中Oracle等待事件怎么用

發布時間:2021-11-11 10:15:38 來源:億速云 閱讀:139 作者:小新 欄目:關系型數據庫

這篇文章主要為大家展示了“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等待事件怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

六盘水市| 奉新县| 武胜县| 湾仔区| 云林县| 武宣县| 东兰县| 吐鲁番市| 星座| 瑞安市| 瑞丽市| 吉林市| 永福县| 金阳县| 台东县| 凉城县| 尤溪县| 江油市| 修文县| 麻江县| 丰都县| 石泉县| 大足县| 西华县| 安福县| 沂水县| 莱芜市| 肇源县| 大宁县| 腾冲县| 霞浦县| 社会| 威远县| 江阴市| 刚察县| 饶平县| 青浦区| 阳山县| 新乐市| 徐州市| 垦利县|