cursor: pin S 等待事件
2015.06.03
檢視生產庫的等待事件的時,經常看到 cursor: pin S 等待事件
這是一個由於頻繁執行SQL共享解析時產生的競爭。當一個會話嘗試以共享模式(S - Share)來獲得一個遊標時,需要修改相應的Mutex結構的引用計數(reference count),或者增加該計數,或者減少。修改引用技術的原子操作很快(其實和Latch的獲取釋放類似),但是在頻繁解析的情況下,仍然產生了競爭和等待,由此就產生了 cursor : pin S 的等待。
下面語句找到引起 cursor: pin S等待事件的具體SQL:
點選(此處)摺疊或開啟
-
SELECT a.*, s.sql_text
-
FROM v$sql s,
-
(SELECT sid,
-
event,
-
wait_class,
-
p1 cursor_hash_value,
-
p2raw Mutex_value,
-
TO_NUMBER (SUBSTR (p2raw, 1, 8), \'xxxxxxxx\') hold_mutex_x_sid
-
FROM v$session_wait
-
WHERE event LIKE \'cursor: pin S\') a
- WHERE s.HASH_VALUE = a.cursor_hash_value;
這通常是由於某些SQL以超高頻繁的頻率執行導致的,當然也可能與系統的CPU能力不足有關。
結合該庫的實際情況,確定為某些SQL超高頻繁的執行導致的,應該是程式設計師或者資料庫開發人員將SQL寫到迴圈裡導致的,超高頻執行,算了一下業務高峰期時大概每分鐘,每個SQL執行10萬次。
Mutex機制在Oracle 10g引入,用於替代Library cache pin操作,其效能更高,其原理為在每個Child Cursor上分配一個地址空間記錄Mutex,當該Cursor被共享執行時,透過將該位進行加一處理來實現。雖然是指遊標共享,但是更新Mutex結構的操作需要排他,當某一個SQL被頻繁共享執行時,可能就會出現Pin S的等待。
每個Library Cache物件都有一個reference count (引用計數),用來表明有多少其他物件目前正保留一個對它的引用(reference). 物件A 想要引用物件B, A 就把B 的 reference count 加 1。 當A 結束了對B 的引用, A 就把 B 的reference count 減 1. 當沒有任何物件再引用 B 時, B 的 reference count就減為0, B 就被清除(deallocated), 記憶體就被釋放。清除B的時候, 被B所用的物件的 reference count 也可能減小, 也可能使它們被清除。
最簡單的解決方案是,將頻繁執行的SQL分割槽拆解,分散競爭。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30936525/viewspace-2016594/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cursor: pin S wait on X等待事件。AI事件
- oracle等待事件之cursor:pin S wait on XOracle事件AI
- cursor: pin S wait on X等待事件模擬AI事件
- cursor: pin S wait on X等待事件模擬(轉)AI事件
- 【故障】cursor: pin S wait on X等待事件大量出現AI事件
- cursor: pin S wait on X等待事件的處理過程AI事件
- cursor: mutex S等待事件Mutex事件
- Cursor pin S wait on X 事件AI事件
- 【徵文】cursor: pin S wait on X等待事件的處理過程AI事件
- cursor: pin S wait on X等待實驗二AI
- 'cursor:mutex ..'/ 'cursor:pin ..'/ 'library cache:mutex ..'型別的等待事件Mutex型別事件
- [20201117]解析cursor pin S等待事件.txt事件
- library cache lock和cursor: pin S wait on X等待AI
- 解析cursor pin S等待事件中的p1、p2、p3值事件
- Cursor Mutex S Waits等待事件引發hangMutexAI事件
- 遭遇cursor:pin x等待事件定位阻塞會話診斷過程事件會話
- cursor pin S wait on XAI
- cursor: pin S wait on XAI
- cursor:pin S wait on XAI
- 一次cursor: pin S wait on X事件的跟蹤AI事件
- 學習Oracle核心(cursor: pin S)Oracle
- 【等待事件】library cache pin事件
- 等待事件--library cache pin事件
- library cache pin 等待事件事件
- cursor: pin S wait on X模擬AI
- cursor: pin S模擬與處理
- cursor:pin S wait on X故障診分析AI
- 解決library cache pin等待事件事件
- enq:Library cache lock/pin等待事件ENQ事件
- cursor: pin S產生原理及解決方法
- 等待事件Cursor: Pin S Wait On X和Library Cache Load Locks可能意味著過度的記憶體調整事件AI記憶體
- library cache pin等待事件的模擬事件
- 分散式引起的cursor: pin S wait on X 事件一次問題處理分散式AI事件
- cursor: pin S簡單說明以及測試、解決
- AWR報告實戰之cursor:pin S wait on XAI
- zt_小荷_記得cursor pin s wait on xAI
- 記一次cursor pin s wait on X的處理AI
- [20170707]cursor: pin S wait on X(10G)AI