探索系列——神人steve adams之著oracle8i interal service(九)
當一個會話release 一個enqueue lock,它會檢查lock request和conversion queues(對於某個資源),如果可能,給下個程式傳送通知,你可以持有這個資源的鎖了.
程式在等待前,也會設定一個alarm,這個程式會發生enqueue wait.超時間隔或期間依賴於資源的型別。對於大多數入隊,入隊等待超時是3秒.
當嘗試請求一次enqueue lock時,如果發生連續的等待,會在系統或會話中記錄下來。但是,v$sysstat的入隊等待統計僅僅是遞增。請注意:v$sysstat入隊超時資訊並不表示
入隊等待超時次數。相反,當入隊請求或入隊轉變被中斷時,這個統計資訊值會遞增時。這可能與一個分散式事務超時有關,但通常與在no-wait mode請求鎖有關.
fixed array free lists
每個oracle固定佇列的free slots在一個自由列表free list中維護。對於這種佇列,free lists 頭部的指標會指向這個佇列的其中free slots之一.相反,這個slot,會有一個指標指向自由列表下一個free slot。
free slots經常從free list的頭部得到,經常返回free list的頭部。這意味著free list的尾部經常不會用,當有必要時,hwm僅僅先前進展.
如果v$sysstat發現大量入隊等待,透過x$ksqst得到或發現對於某種資源等待的故障或問題.
大多建議增加enqueue_resources減少入隊等待。但請注意這個沒有作用。oracle將會發生ora-52或53錯誤,如果在enqueue resource(或enqueue locks fixed array)中找不到free slot.除於以外,
配置enqueue_resource和_enqueue_locks起效不明顯.
v$resource_limit可以調整enqueue_resources和_enqueue_locks,確認你不會用完array的slots。因為array的slots會分別採用72bytes和60bytes的次序.我想在曾經最大利用的空間之上維護或佔用20%的空間.
deadlock detection
oracle自動實現enqueue locking死鎖的死鎖檢測.如果發生一次入隊等待超時,就會產生死鎖檢測,如果所需要的資源型別與死鎖關係比較大,如果鎖的狀態沒有改變。
如果發現死鎖,會話只是終止或rollback當前的語句,以打破死鎖。注意,僅僅是當前語句的rollback,沒必要整個事務.oracle會在每個語句開始時,設定一個隱式儲存點,叫作預設儲存點,
只是rollback到這個儲存點。
會話發現一個死鎖時,會產生ora-60錯誤。v$sysstat會記錄發生了多少次enqueue deadlock。
blocking locks
有多種診斷blocking lock情況的方式,正常處理是透過殺掉產生麻煩的會話.
blocking locks基本是tx(transaction) locks on tm(table) locks。
一些應用開發者用select for update nowait來避免blocking locks.但是如果採用這種方式允許使用者交涉,得到一個sub-exclusive的鎖和release鎖,此時會產生更為細微的lock。假如一個使用者出外吃飯時,
正對一個表持有sub-exclusive lock,此時對於表任何鎖請求將會阻塞請求佇列的頭部,所有其它的鎖請求將會在它之後排隊.
程式在等待前,也會設定一個alarm,這個程式會發生enqueue wait.超時間隔或期間依賴於資源的型別。對於大多數入隊,入隊等待超時是3秒.
當嘗試請求一次enqueue lock時,如果發生連續的等待,會在系統或會話中記錄下來。但是,v$sysstat的入隊等待統計僅僅是遞增。請注意:v$sysstat入隊超時資訊並不表示
入隊等待超時次數。相反,當入隊請求或入隊轉變被中斷時,這個統計資訊值會遞增時。這可能與一個分散式事務超時有關,但通常與在no-wait mode請求鎖有關.
fixed array free lists
每個oracle固定佇列的free slots在一個自由列表free list中維護。對於這種佇列,free lists 頭部的指標會指向這個佇列的其中free slots之一.相反,這個slot,會有一個指標指向自由列表下一個free slot。
free slots經常從free list的頭部得到,經常返回free list的頭部。這意味著free list的尾部經常不會用,當有必要時,hwm僅僅先前進展.
如果v$sysstat發現大量入隊等待,透過x$ksqst得到或發現對於某種資源等待的故障或問題.
大多建議增加enqueue_resources減少入隊等待。但請注意這個沒有作用。oracle將會發生ora-52或53錯誤,如果在enqueue resource(或enqueue locks fixed array)中找不到free slot.除於以外,
配置enqueue_resource和_enqueue_locks起效不明顯.
v$resource_limit可以調整enqueue_resources和_enqueue_locks,確認你不會用完array的slots。因為array的slots會分別採用72bytes和60bytes的次序.我想在曾經最大利用的空間之上維護或佔用20%的空間.
deadlock detection
oracle自動實現enqueue locking死鎖的死鎖檢測.如果發生一次入隊等待超時,就會產生死鎖檢測,如果所需要的資源型別與死鎖關係比較大,如果鎖的狀態沒有改變。
如果發現死鎖,會話只是終止或rollback當前的語句,以打破死鎖。注意,僅僅是當前語句的rollback,沒必要整個事務.oracle會在每個語句開始時,設定一個隱式儲存點,叫作預設儲存點,
只是rollback到這個儲存點。
會話發現一個死鎖時,會產生ora-60錯誤。v$sysstat會記錄發生了多少次enqueue deadlock。
blocking locks
有多種診斷blocking lock情況的方式,正常處理是透過殺掉產生麻煩的會話.
blocking locks基本是tx(transaction) locks on tm(table) locks。
一些應用開發者用select for update nowait來避免blocking locks.但是如果採用這種方式允許使用者交涉,得到一個sub-exclusive的鎖和release鎖,此時會產生更為細微的lock。假如一個使用者出外吃飯時,
正對一個表持有sub-exclusive lock,此時對於表任何鎖請求將會阻塞請求佇列的頭部,所有其它的鎖請求將會在它之後排隊.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-660588/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 探索系列_神人steve adams之著oracle8i interal service(一)Oracle
- 探索系列_神人steve adams之著oracle8i interal service(二)Oracle
- 探索系列_神人steve adams之著oracle8i interal service(三)Oracle
- 探索系列_神人steve adams之著oracle8i interal service(四)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(五)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(六)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(七)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(八)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十一)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十二)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十三)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十四)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十五)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十六)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十七)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十八)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十九)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(二十)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(二十一)Oracle
- Steve Adams的《Oracle8i internal services for waits, latches, locks》試譯OracleAI
- script--by Steve Adams
- script--by Steve Adams--hidden_parameters.sqlSQL
- MySQL鎖系列(九)之longtransactionMySql
- Android探索之Service全面回顧及總結Android
- Spark 系列(九)—— Spark SQL 之 Structured APISparkSQLStructAPI
- Akka系列(九):Akka分散式之Akka Remote分散式REM
- Akka 系列(九):Akka 分散式之 Akka Remote分散式REM
- 探索C#之系列目錄導航C#
- 效能優化 (九) APP 穩定性之熱修復原理探索優化APP
- 動態規劃系列之九找零錢動態規劃
- Myth原始碼解析系列之九-總結原始碼
- 探索Oracle之資料庫升級九 12.1.0.1 Update 12.1.0.2Oracle資料庫
- 沒閒著系列 18
- 螞蟻金服 Service Mesh 實踐探索
- 探索es6系列之—-Generator生成器函式函式
- canvas 基礎系列(三)之實現九宮格抽獎Canvas
- 跟著圖靈聽課去!(九月)圖靈