国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Oracle Enqueue(隊列)

IT那活兒 / 2782人閱讀
Oracle Enqueue(隊列)

點擊上方“IT那活兒”公眾號,關注后了解更多內容,不管IT什么活兒,干就完了!??! 


  

Enqueue(隊列)是一種共享內存結構,用于串行訪問數據庫資源,關聯一個會話或事務,它是Oracle訪問數據庫對象的lock,每個試圖鎖住資源的會話,將會獲得這個資源的Enqueue。


01

Enqueue通常用"TYPE-ID1-ID2"格式表示,其中:
"TYPE" 用兩個字符串表示,如:TX、TM、UL、BL、BR、CF等。

02

Enqueue包含用戶類型的鎖和系統鎖。
2.1 用戶類型的鎖
用戶鎖是用戶應用程序獲得的鎖,來保護數據的完整性和用戶對象的結構。
用戶類型的鎖等待不是Oracle代碼的問題,是應用程序代碼的問題。
用戶類型的鎖有三種類型:TX、TM、UL。
  • TM鎖稱為表級鎖;
  • TX鎖稱為事務鎖或行級鎖;
  • UL是用戶使用DBMS_LOCK包自定義的鎖。
2.2 系統鎖
系統鎖包含:
  • CF(Controlfile Enqueue)

  • DX (Distributed Transaction Enqueue)

  • FB (Block Format Enqueue)

  • HW( High Water Enqueue)

  • JS (Job Scheduler Enqueue)

  • RO (Fast Object Reuse Enqueue)

  • SQ( Sequence Cache Enqueue)

  • ST( Space Transaction Enqueue)

  • TO( Temporary Table Object Enqueue)

  • TT (Tablespace Operations Enqueue)

  • US( Undo Segment Enqueue)等等

系統鎖通常會自動釋放,不用過多關注。
生產環境中TX類型的鎖比較常見。
  • LOCK: TX "Transaction Enqueue".

TX鎖是表中單個行的行鎖,當某行被增刪改、合并及SELECT ... FOR UPDATE時,事務就獲得了該行的行鎖,直到提交或回滾才釋放該鎖。
當TX鎖競爭出現,通常會出現各種enq: TX - 等待事件,如:
  • enq: TX - contention

  • enq: TX - row lock contention

  • enq: TX - allocate ITL entry

  • enq: TX - index contention

以enq: TX - row lock contention舉例
test1表如下:
--會話1:
update u1.test1 set name=MM where id=5
--會話2:
update u1.test1 set name=zz where id=5
--DBA會話3:
SELECT sid,type,id1,id2,lmode,request FROM v$lock WHERE type=TX;
查詢結果:
SID TYPE ID1 ID2 LMODE REQUEST
52   TX 524288   13106   6    0
59   TX 524288   13106   0    6
表明SID 59正在等待SID 52 持有的TX鎖,它想以獨占模式獲得該鎖。

03

一些常見的處理鎖的實用SQL
3.1 查找blocker、waiter


SELECT DECODE(request,0,Holder: ,Waiter: )||sid sess,
id1, id2, lmode, request, type
FROM V$LOCK
WHERE (id1, id2, type) IN
(SELECT id1, id2, type F
ROM V$LOCK WHERE request>0)
ORDER BY id1, request
查詢結果:
SESS        ID1 ID2 LMODE REQUEST TYPE
Holder: 52  524288  13106 6    0      TX
Waiter: 59  
524288  13106 0    6      TX
  • SID:52是blocker,正持有該鎖;

  • SID:59是waiter,等待獲得該鎖.


3.2 查詢被鎖的對象、sql_id及sql語句等

SELECT DECODE(LV, 1, Holder:  || S.SID, Waiter:  || S.SID) SESS_STATUS,S.USERNAME,OBJECT_NAME,S.inst_id,S.SID,s.serial#, DECODE(L.LMODE, 0, None, 1, Null, 2, Row-S (SS), 3, Row-X (SX), 4, Share, 5, S/Row-X (SSX), 6, Exclusive, TO_CHAR(L.LMODE)) LOCK_MODE, TRUNC(L.CTIME / 3600) || : || TRUNC(MOD(L.CTIME, 3600) / 60) || : || MOD(L.CTIME, 60) CTIME, S.STATUS, S.MACHINE, S.SQL_ID, Q.SQL_TEXT
FROM (SELECT /*+ NO_MERGE */(3-LEVEL) LV, INST_ID, SID, TYPE, LMODE, CTIME
FROM (SELECT /*+ NO_MERGE */A.INST_ID, A.SID, A.TYPE, A.LMODE, A.REQUEST,
CASE
WHEN REQUEST = 0 THEN ID1
END ID1,
CASE
WHEN REQUEST > 0 THEN ID1
END ID3,
A.CTIME
FROM GV$LOCK A
WHERE A.TYPE <> MR) START WITH REQUEST > 0 CONNECT BY PRIOR ID3 = ID1 ) L,
GV$SESSION S,
GV$PROCESS P,
dba_objects O,
GV$SQL Q
WHERE L.SID = S.SID
AND L.INST_ID = S.INST_ID
AND S.INST_ID = P.INST_ID(+)
AND S.PADDR = P.ADDR(+)
AND S.ROW_WAIT_OBJ# = O.OBJECT_ID(+)
AND S.SQL_ID = Q.SQL_ID(+)
GROUP BY DECODE(LV, 1, Holder:  || S.SID, Waiter:  || S.SID), S.INST_ID,S.SID,s.serial#, S.USERNAME, O.OBJECT_NAME, L.TYPE, L.LMODE, L.CTIME, S.STATUS, S.MACHINE,S.SQL_ID,Q.SQL_TEXT;
查詢結果:
SESS_STATUS USERNAME OBJECT_NAME INST_ID SID SERIAL# LOCK_MODE CTIME STATUS MACHINE SQL_ID SQL_TEXT
Holder: 52 U1 1 52 54450 Exclusive 0:34:15 INACTIVE WORKGROUPDREAM
Waiter: 59 U1 TEST1 1 59 50489 None 0:34:6 ACTIVE WORKGROUPDREAM 2btf137sycbdh update u1.test1 set name=zz where id=5


3.3 鎖的處理
查詢數據庫鎖情況:
select decode(request,0,Holder,Waiter) req ,s.inst_id , s.sid, s.serial#,p.spid,s.status, id1, id2, lmode, request, l.type, ctime, s.sql_id, s.event#,s.event,s.last_call_et
from gv$lock l

join gv$session s on l.sid=s.sid and l.inst_id=s.inst_id
join gv$process p on s.paddr=p.addr and p.inst_id=s.inst_id
where (id1, id2, l.type) in
(select id1, id2, type from gv$lock where request>0   )
order by id1, ctime desc, request;
操作系統查殺:kill -9 spid.
或數據庫殺會話:alter system  kill session sid,serial#.

END



本文作者:談龍鳳

本文來源:IT那活兒(上海新炬王翦團隊)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129495.html

相關文章

  • JavaScript數據結構03 - 隊列

    摘要:但是,還有一種隊列叫優先隊列,元素的添加和移除是依賴優先級的。分類優先隊列分為兩類最小優先隊列最大優先隊列最小優先隊列是把優先級的值最小的元素被放置到隊列的最前面代表最高的優先級。那么最小優先隊列排序應該為,,,。 一、定義 前面我們學習了棧的實現,隊列和棧非常類似,但是使用了不同的原則,而非后進先出。 隊列是遵循FIFO(First In First Out,先進先出)原則的一組有序...

    Jonathan Shieber 評論0 收藏0
  • JS數據結構學習:隊列

    隊列的定義 隊列是遵循先進先出原則的一組有序的項,與棧的不同的是,棧不管是入棧還是出棧操作都是在棧頂操作,隊列則是在隊尾添加元素,隊頂移除,用一個圖來表示大概是這樣事的:showImg(https://segmentfault.com/img/remote/1460000018133039?w=584&h=294);用一個更形象的例子就是:排隊服務,總是先排隊的人會先接受服務,當然不考慮插隊的情況...

    OpenDigg 評論0 收藏0
  • Python數據結構——隊列

    摘要:隊列是一種先進先出,的數據結構。隊列的另外一項重要操作是讀取隊頭的元素。通常的操作定義一個空隊列,無參數,返回值是空隊列。刪除隊列頭部的數據項,不需要參數,返回值是被刪除的數據,隊列本身有變化。 隊列是一種列表,不同的是隊列只能在隊尾插入元素,在隊首刪除元素。隊列用于存儲按順序排列的數據,先進先出,這點和棧不一樣,在棧中,最后入棧的元素反而被優先處理??梢詫㈥犃邢胂蟪稍阢y行前排隊的人群...

    wwolf 評論0 收藏0
  • JS 隊列-優先隊列、循環隊列

    摘要:隊列是遵行先進先出原則的一組有序的項。優先隊列是默認隊列的變種,它的元素的添加和移除是基于優先級的。如此循環,直至隊列的長度等于,返回勝者行。同時,還掌握了很著名的優先隊列循環隊列這兩種結構。 《學習JavaScript數據結構與算法》讀書筆記。 隊列是遵行FIFO(First In First Out, 先進先出)原則的一組有序的項。隊列再尾部添加新元素,并從頂部移除元素。 在現實中...

    ctriptech 評論0 收藏0
  • 數據結構-隊列

    摘要:隊列是一種列表不同的是隊列只能在隊尾插入元素在隊首刪除元素是一種先進先出的數據結構隊列被用在很多地方比如提交操作系統執行的一系列進程打印任務池等一些仿真系統用隊列來模擬銀行或雜貨店排隊的顧客隊列的操作主要有兩種操作向隊尾中插入新元素入隊刪除 隊列是一種列表, 不同的是隊列只能在隊尾插入元素, 在隊首刪除元素. 是一種 先進先出 的數據結構. 隊列被用在很多地方, 比如提交操作系統執行的...

    miya 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<