Oracle鎖4:系統鎖,oracle鎖4系統

來源:互聯網
上載者:User

Oracle鎖4:系統鎖,oracle鎖4系統

Oracle資料庫用了多種系統鎖保護內部資料庫和記憶體結構,這些機制對於使用者來說是透明的。

閂(Latches)

閂是簡單的、低層級的序列化機制,協調多個使用者使用共用資料結構、對象和檔案,閂在平行處理中保護共用記憶體資源,特別地,閂在下面的情境中保護資料結構:
 1)被多個session並行修改;
 2)當被一個session讀的同時被另一個session修改;
 3)當被訪問時重新分配記憶體。
通常,在SGA中單個閂保護多個對象,例如,後台進程(例如DBWn和LGWR)從共用池(shared pool)分配記憶體建立資料結構,為了分配這些記憶體,這些進程用一個共用池閂防止兩個進程同時檢查或修改共用池。記憶體被分配後,其它進程可能需要訪問共用池,例如庫緩衝(library cache),用於解析,這時,進程閂只鎖庫緩衝,不鎖整個共用池。
不像隊列閂,例如行鎖,閂不允許session排隊。當一個閂成為可用時,發起請求的第一個session擷取到閂。當一個進程在一個迴圈中重複地請求一個閂,叫做Latch spinning,而一個進程等待請求閂期間睡眠釋放CPU,則叫做latch sleeping。
通常,一個Oracle進程在操作或查看一個資料結構時只擷取閂極短的時間,例如,當處理一個僱員的薪水更新時,資料庫可以擷取和釋放幾千次鎖。閂的實現依賴於作業系統,特別是對於怎麼處理閂的等待。
閂的增加意味著並行度的減少,例如,排它硬解析操作會競爭庫緩衝閂。V$LATCH試圖包含了每種閂使用的統計資訊,包括每種閂被請求的次數和等待的時間。

互斥鎖(Mutex)

互斥排它對象(互斥鎖)是一個低層級的機制,用於防止一個記憶體對象在並行作業時到期或者腐化。互斥鎖和閂類似,但通常閂保護一組對象,互斥鎖則保護單個對象。
互斥鎖通常用於:
 1)減少競爭;
 因為閂保護多個對象,當多個進程嘗試並發的進入這多個對象的任意一個時,都會阻塞其它進程對其它對象的訪問。而互斥鎖減少了鎖的範圍,減少競爭。
 2)互斥鎖比閂花費更少的記憶體;
 3)當使用共用模式時,一個互斥鎖允許被多個session並行引用。

內部鎖

內部鎖是比閂和互斥鎖更進階別、更複雜的機制,資料庫使用那個下面幾種類型的互斥鎖:

字典緩衝鎖(Dictionary cache locks)

這些鎖期間很短,當字典緩衝的條目被修改或者使用時使用。它們保證被解析的語句看不到不一致的對象定義。字典緩衝做能是共用的或者排它的,當解析完成時共用鎖定被釋放,而當DDL操作完成時排它鎖被釋放。

檔案和日誌管理鎖

這些鎖保護各種檔案,例如,一種內部鎖保護控制檔案(control file)以至於一次僅有一個進程能夠改變它,另一種鎖協調線上重做記錄檔的使用和歸檔。資料檔案被鎖以確保多個執行個體在共用模式下裝載一個資料庫或者一個執行個體在排它模式裝載一個資料庫。因為檔案和日誌鎖表示了檔案的狀態,這些鎖不可避免是需要長時間持有的。

資料表空間和undo段鎖

這些鎖保護資料表空間和undo段。例如,一個資料庫的所有執行個體對於一個資料表空間是線上還是下線必須保持一致。為了保證一次僅一個資料庫能寫入一個undo段,undo段必須加鎖。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.