oracle lock系列一
/***********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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle RAC Cache Fusion 系列十:Oracle RAC Enqueues And Lock Part 1OracleENQ
- ORACLE LOCK,LATCH,PINOracle
- ORACLE LOCK MODE 1.2.3.4.5.6Oracle
- ORACLE基礎之oracle鎖(oracle lock mode)詳解Oracle
- oracle系列(一)sqlplus命令OracleSQL
- oracle資料庫事務transaction鎖lock模式思考之一Oracle資料庫模式
- oracle事務transaction鎖lock一點兒小思考或總結Oracle
- Oracle 中的並行系列(一)Oracle並行
- 【TUNE_ORACLE】等待事件之“library cache lock”Oracle事件
- GaussDB資料庫SQL系列-LOCK TABLE資料庫SQL
- mysql innodb lock鎖之record lock之一MySql
- Oracle系列Oracle
- oracle ORA-01157: cannot identify/lock data file 64OracleIDE
- Oracle Enqueues Wait Events 三 enq: TX - row lock contentionOracleENQAI
- Oracle RAC Cache Fusion 系列一:基礎概念Oracle
- Oracle RAC Cache Fusion 系列八:Oracle RAC 分散式資源管理(一)Oracle分散式
- Oracle Data Guard Feature 12cR2系列(一)Oracle
- 【鎖】Oracle鎖系列Oracle
- oracle資料庫事務transaction 不同的鎖lock型別Oracle資料庫型別
- MIT xv6 2020系列實驗:Lab8 lockMIT
- Oracle RAC Cache Fusion 系列十七:Oracle RAC DRMOracle
- 【ASK_ORACLE】LOCK_SGA引數失效的解決辦法Oracle
- 【面試普通人VS高手系列】lock和synchronized區別面試synchronized
- library cache pin和library cache lock(一)
- Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part TwoOracleServer
- Oracle 11g 密碼延遲認證與 library cache lock 等待Oracle密碼
- ORACLE分割槽表梳理系列Oracle
- Oracle叢集技術 | 叢集的自啟動系列(一)Oracle
- Oracle 12c系列(一)|多租戶容器資料庫Oracle資料庫
- 深入理解Java併發框架AQS系列(四):共享鎖(Shared Lock)Java框架AQS
- Oracle RAC Cache Fusion系列十八:Oracle RAC Statisticsand Wait EventsOracleAI
- Lock 鎖
- 一次library cache lock 問題分析
- 【ASK_ORACLE】Library cache pin 與 library load lock的關係和區別Oracle
- 當刪除oracle資料庫user時發生row cache lock 等待事件Oracle資料庫事件
- 深入理解Java併發框架AQS系列(三):獨佔鎖(Exclusive Lock)Java框架AQS
- Oracle RAC Cache Fusion 系列十四:Oracle RAC CR Server Part OneOracleServer
- 併發程式設計系列之Lock鎖可重入性與公平性程式設計
- Jou 的問答系列:compoer.json 和 composer.lock 有什麼作用?JSON