oracle lock系列一

wisdomone1發表於2013-04-09

/***********v$lock官方**************/

oracle lock
------------------------------------------------------------------
/***************鎖型別****************/
1,根據操作行為及性質的不同,lock type鎖型別分為;
     共享鎖shared locks
     排它鎖exclusive locks
2,exclusive locks產生,和獲取表或表的一條記錄資源有關;
  而shared locks基於資料庫某個獲取資源時產生

/***********鎖模式******************/ 
3,lock modes持鎖的模式
4,lock mode和併發有關;持鎖模式級別高一些,併發就會低一些;
  相反則更高一些;
5,lock mode由oracle動態調節其級別以保證合理的併發訪問
6,lock mode分為:
    排它鎖模式exclusive lock mode
    共享鎖模式share lock mode
7,排它鎖模式
  修改資料會產生此模式
    第一個鎖定資源的事務會以此模式持有資源,其它事務不能修改此資料
8,共享鎖模式
    多個使用者會話可以同時持有此模式同時讀取資料
    此模式防止併發訪問某些使用者會話申請排它鎖
 
9,select * for update語句產生一個行級排它鎖 和 一個行級共享表鎖
10,行級排它鎖防止其它事務修改此行
11,行級共享表鎖防止其它事務修改表的結構
------------------------------------------------------------------------  

 

/******************鎖轉化************************/
12,lock conversion鎖轉化
13,鎖轉化由oracle自動完成
14,鎖轉化針對鎖模式,即由低階的鎖模式轉化為高階的鎖模式(模式越高,對於資源訪問控制越嚴格)          
15,比如:一個事務先執行了select * for update;後又更新了此鎖定的記錄;這種情況下;
  oracle自動把之前select * for update的鎖模式由行級共享表鎖轉化為行級排它表鎖
16,高階別的鎖模式不需要鎖轉化


/*************鎖擴大****************/
鎖擴大lock escalation
1,鎖擴大與鎖轉化不是一回事
2,鎖擴大會加大死鎖的可能性
3,比如:事務1鎖定表的一些記錄,鎖擴大的表鎖;而事務也正在更新此表的一些記錄,也進行鎖擴大,此時就產生了死鎖;
 都想去競爭表鎖

 

/*****************鎖的型別**************************/
1,根據事務操作的資源型別有:
    1,dml locks
         1,table lock鎖定整個表
         2,row lock鎖定選中的表記錄
        
    2,ddl locks
       1,保護模式物件比如表或檢視的結構定義
   
    3,system locks
         1,保護oracle內部的一些資源物件結構或者資料結構的定義
         2,比如:datafile
                latch
                mutex
                internal
         3,它是由oracle自動化控制
        
/*******************上述鎖的型別:依次展開說明*****************/     
1,dml locks
         1,table lock鎖定整個表
         2,row lock鎖定選中的表記錄 
2,dml locks
     1,自動獲取2種型別的鎖
         2,row lock(tx)
           table lock(tm)
          
         /*******row lock**********/ 
         1,row lock也叫tx lock,它針對表的一條記錄
         2,執行insert,delete,update,merge,select for update更新一條表記錄會產生row lock
         3,而且oracle同時自動會產生一個subexclusive lock on table        
        
        
        
         /******table lock **********/
         1,也叫tm lock
         2,某個事務執行insert,delete,update,merge,select for update,lock table產生table lock
         3,table lock的功能:
             1,防止其它事務併發修改相同的資源
             2,防止ddl操作併發修改資源的結構定義,比如:正在更新表或檢視的一條記錄時,不能進行ddl操作
            
            
        
         /******獲取table lock表鎖的幾種模式************/
         1,row share(rs)
             1,也叫subshare table lock(ss)
             2,某事務鎖住表的一些記錄,準備更新
             3,它是最低階別的鎖模式,提供最大範圍的併發
        
         2,row exclusive table lock(rx)
           1,也叫subexclusive table lock(sx)
             2,事務已更新了表中一些記錄或者select for update會獲取此鎖模式
             3,此鎖模式允許其它事務在一個表同時執行select,insert,delete,update,lock rows
             4,此鎖模式允許多事務獲取sx及subshare table lock(for the same table)
        
         3,share table lock(s)
             1,此模式允許其它事務select表,注意此select不能是select for update;
             2,此模式允許多個事務獲取此模式
             3,此模式不能確保一個事務修改表的資料
        
        
         4,share row exclusive table lock(srx)
           1,也叫share-subexclusive table lock(ssx)
             2,它比share table lock更嚴格,級別更低
             3,同一時間,基於同一個表,只能有一個事務獲取此模式的鎖
             4,此模式允許其它事務select表,但不能是select for update;
             5,此模式不允許其它事務修改表
            
         5,exclusive table lock(x)
           1,此模式最牛,最高階,最嚴格
             2,此模式不允許進行任何的dml操作
             3,此模式不允許再獲取其它型別的鎖


/***************ddl lock***********************************/        
1,ddl locks
       1,保護模式物件比如表或檢視的結構定義   

2,ddl lock
         1,在進行ddl操作前獲取ddl lock
         2,防止ddl操作期間,修改物件的結構定義
         3,ddl lock獲取和釋放由oracle自動控制
        
3,ddl lock的模式
         1,exclusive ddl lock
              1,防止其它會話獲取ddl lock或dml lock
              2,大多情形,除了下述的share ddl lock的ddl操作,需要exclusive ddl lock,防止其它ddl破環資源結構定義
              3,比如:正在drop table時,不允許alter table add column或者alter table
        
        
         2,share ddl lock      
              1,防止其它ddl操作產生衝突
              2,卻允許其它類似的ddl併發操作   
             
              3,比如:當你正在執行create procedure時,此事務則會獲取要建立儲存過程所引用的物件的share ddl lock;
                     而此時其它併發會話也可以獲取基於此儲存過程所引用物件的share ddl lock
                     但注意:其它事務不能獲取基於此儲存過程所引用物件的exclusive ddl lock
                    
                    
/*************breakable parse locks易碎的解析鎖*******************/  
1,parse lock由模式物件引用的sql或plsql語句或程式碼塊持有
2,持有此鎖的目的,如果sql或plsql引用的物件被drop or alter,以便相關的shared sql area變更為invalidate無效
  (也就是說只有有了這個鎖,共享池中shared sql area的sql or plsql一旦引用物件變化了,其share sql area才可以變為無效)
3,此鎖不允許任何ddl操作

4,此鎖產生於share pool共享池
5,解析sql會獲取此鎖(解析sql要檢視sql所引用物件是否發生過變化,從而決定shared pool中的share sql area是否有否,否則變更為無效;這個期間要獲取此鎖)                 
6,只要針對sql的share sql area在共享池,就要持此鎖,注意是針對sql的share sql area,二者不一回事


/********system locks系統鎖*****************/
1,oracle自動控制
2,保護oracle內部一些資源結構和記憶體結構

3,latch
       1,簡單而低階的序列機制
       2,協調保護多使用者存取訪問共享資料結構,物件,檔案,共享記憶體結構或資源
       3,比如:latch會保護sga上面的多個物件;dbwr和lgwr後臺程式要從共享池中分配記憶體;
        建立資料結構;為了分配記憶體,這些後臺程式就會獲取shared pool latch,
         序列化訪問共享池;
         分配記憶體之後,其它程式可能要訪問shared pool中的library cache,
         library cache主要用於解析;
         此時,這些程式就會獲取library cache latch,而非整個共享池的shared pool latch
        
       4,latch不允許排隊;即獲取到一個latch,獲取到latch的會話以排它模式持有latch;
         其它會話只能等待
       5,latch spinning何時發生呢,一個程式重複請求一個latch;
       6,latch sleeping何時發生呢,一個時程在請求latch之前會釋放cpu資源
       (小結:所以latch spinning會嚴重佔用cpu,而後者較之就好得多
      

4,mutex
       1,也叫mutual exclusion object,mutex是它的簡寫
       2,它是一種低階機制,防止多併發程式導致記憶體物件老化(擠出記憶體)或者被破壞     
       3,它和latch很類似
       4,但是latch一般會保護多個物件,而mutex僅保護一個物件

5,mutex的作用
       1,減少競爭的可能性
       2,因為latch保護多個物件,如果多程式併發訪問這些物件;還是會產生對於latch的競爭;
        而mutex只是一個物件;產生競爭的可能就大大降低了
       3,它佔用的記憶體比latch更少
       4,如mutex處於共享模式,允許多併發會話同時引用它
      
      
/***********internal lock內部鎖**************/ 
1,和latch及mutex相比,它是一種高階,更為複雜的機制
2,它的作用很多
3,資料庫使用如下幾種型別的內部鎖
      1,dictionary cache locks
          1,持有它的時間非常短
          2,用於讀取或修改dictionary cache的條目時,持有此鎖
          3,確保被解析的sql不會看到不一致的物件定義(dictionary cache儲存表或資料字典定義的元結構)
          4,此鎖可用共享或排它模式
          5,sql解析完成共享模式鎖被釋放
          6,ddl操作完成後排它模式被釋放
      
      2,file and log mangement locks
        1,主要用於保護各種檔案
          2,比如:保護控制檔案一個時間點只能有一個程式修改它
          3,多個例項以共享模式mount database,而一個例項以排它模式mount database
          4,保護日誌檔案
         
      3,tablespace and undo segment locks
        1,保護表空間和undo segment
          2,比如:在rac環境下,多例項必須要達成一致基於某個表空間是否為線上或離線;
          3,undo segment被鎖住,確保僅一個例項可以寫入資料       
 

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

相關文章