真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

OracleStudy中Oracle等待事件怎么用

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

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括浦江網(wǎng)站建設(shè)、浦江網(wǎng)站制作、浦江網(wǎng)頁(yè)制作以及浦江網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,浦江網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到浦江省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

Oracle Study之--Oracle等待事件

什么是enqueue

enqueue可以做名詞,也可以做動(dòng)詞來(lái)解釋。做名詞時(shí),指的的是一種鎖的類型,比如Tx enqueue。做動(dòng)詞時(shí),則是指將鎖請(qǐng)求放入到請(qǐng)求隊(duì)列的操作。

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

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

什么是enqueue resource

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

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

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

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

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

什么是enqueue lock

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

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

什么是enqueue hash

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

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

通過(guò)對(duì)enqueue的名字進(jìn)行hash計(jì)算,得到的結(jié)果就是某個(gè)enqueue resource在hash數(shù)組中的位置,也就是定位到了具體的hash bucket。如果多個(gè)enqueue resource的hash值相同,則在同一個(gè)bucket中形成一個(gè)鏈表。

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

什么是enqueue freelist

同樣的,對(duì)于enqueue resource數(shù)組中的空閑位置,需要通過(guò)一個(gè)freelist列表來(lái)管理,這樣每次在請(qǐng)求新的位置時(shí),不至于要掃描整個(gè)數(shù)組。enqueue freelist由enqueues latch的保護(hù)。

實(shí)際上,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 這個(gè)詞其實(shí)是lock 的另一種描述語(yǔ)。

當(dāng)我們?cè)贏WR 報(bào)告中發(fā)現(xiàn)長(zhǎng)時(shí)間的enqueue 等待事件時(shí),說(shuō)明數(shù)據(jù)庫(kù)中出現(xiàn)了阻塞和等待,可以關(guān)聯(lián)AWR報(bào)告中的enqueue activity部分來(lái)確定是哪一種鎖定出現(xiàn)了長(zhǎng)時(shí)間等待。

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

Name: enqueue 的名稱和類型。

Mode: enqueue的模式。

可以使用如下SQL 查看當(dāng)前會(huì)話等待的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)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


新聞名稱:OracleStudy中Oracle等待事件怎么用
瀏覽路徑:http://weahome.cn/article/jpjsps.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部