oracle的單例項併發控制:Lock(一)

Nalternative發表於2011-05-03
         在oracle的單例項中,有兩種併發控制機制:Lock和Latch。
       
         Lock從兩方面理解,首先它代表的是一種控制機制;其次,在這個機制中有一個成員也叫做Lock。
         從機制角度看,Lock框架包括3個元件:Resource Strunture(資源)、Lock Structure(鎖)和Enqueue(排隊機制)。Resource和Lock是資料結構,Enqueue是使用的演算法。
         Converter和Waiter兩個都是等待佇列,二者的用法有細微區別。
         這種控制機制需要Resource、Lock兩種資料結構,但會消耗記憶體空間。對應粗粒度或者數量有限的資源,使用這種機制還可以,但是對應資料記錄這種機制就不適用了,oracle使用的是行級鎖(Row-Level Lock).

會話一:
SQL> select *from a;
        ID NAM
---------- ---
         1 shi
         2 x
SQL> savepoint a;
儲存點已建立。
SQL> update a set name='d' where id=2;
已更新 1 行。
會話二:
SQL> update a set name='d' where id=2;
處於等待中。。。。。。。。
會話一:
SQL> rollback to a;
回退已完成。

會話二依然處於等待中。。。。。。。。。。
 
檢視系統,可以看到會話二在等待會話一的TX鎖:
USERNAME EVENT SID BLOCKING_SESSION
EDU enq: TX - row lock contention 244 263
EDU SQL*Net message from client 257 [NULL]

oracle內的鎖共有6中模式:
         Null、Share、Exclusive、Sub-Shared、Sub-Exclusive、Shared-sub-exclusive
           通過把物件按簡單物件、符合物件分類,並使用不同鎖,對效能有很大提升。
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25323853/viewspace-694372/,如需轉載,請註明出處,否則將追究法律責任。

相關文章