1. 程式人生 > >Oracle cursor pin S wait on X 等待事件 說明

Oracle cursor pin S wait on X 等待事件 說明

這個等待事件也算一個常見的等待事件。 warehouse blogitpub 上有相關的2個帖子。 連線如下:

cursor: pin S wait on X等待事件模擬

cursor: pin S wait on X

.Mutex 說明

Oracle Mutex 機制說明

To improve cursor execution and also hard parsing, a new memory serialization mechanism has been created in 10gR2.
For certain shared-cursor related operations, mutexes are used as a replacement for library cache latches and librarycache pins.

-- mutexes 替代 library cache latches librarycache pins

Using mutexes is faster, uses less CPU and also allows significantly improved concurrency over the existing latch mechanism.
The use of mutexes for cursor pins can be enabled by setting the init.ora parameter _use_kks_mutex toTRUE.

Btw, things get more fun in 10.2, you can pin cursors without getting library cache pin latch, using KGX mutexes.

Mutexes are new thing in 10.2 and they enable shared access to objects in somewhat similar manner than shared latches, that every successful get of particular mutex will increment its value and release will decrement. When the count is zero, no-one has the mutex and it is safe to get it in exclusive mode too. However they are more fine grained than kgl latches and provide better waiting mechanism as far as I understand.

So if your environment supports atomic compare and swap operation (as CMPXCHG on Intel), you might get away without cursor_space_for_time setting for ultrahigh execution rates. Otherwise the atomic mutex operations would be achieved using new KGX latches.

At least on my laptop this feature isn’t enabled by default (from andOracleWorld’s paper I remember that it should become default in 10.2.0.2), but so far you can experiment with it if you set _kks_use_mutex_pin = true and bounce the instance
(mutex structures will be stored in shared pool, so you might need to increase SP size).

There are also x$mutex_sleep and x$mutex_sleep_history fixed tables that can show some interesting information if you generate some mutex waits into them.

Oracle 10.2中,對shared pool中的一些Serialization operation使用更輕量的 KGX mutexes (_use_kks_mutex) 取代library cache pin,從而降低CPU Usage, 是否使用這種muetx機制受到隱含引數_kks_use_mutex_pin的限制

10.2.0.2開始該引數defaulttrue,使用這種機制oracle是為了解決library cache bin latch的序列使用問題,但是mutex貌似還不是很穩定,在很多系統中會出現cursor: pin S wait on X等待事件,這個事件和mutex的使用有關,最近一客戶受到cursor: pin S wait on X等待事件的困擾,出現cursor: pin S wait on X等待事件時通常等待比較嚴重,系統會出現hang

cursor: pin S wait on X
A session waits for this event when it is requesting a shared mutex pin and another session is holding an exclusive mutex pin on the same cursor object.

Wait Time: Microseconds

Parameter Description
P1 Hash value of cursor
P2 Mutex value (top 2 bytes contains SID holding mutex in exclusive mode, and bottom two bytes usually hold the value 0)
P3 Mutex where (an internal code locator) OR'd with Mutex Sleeps

這個事件的出現受到很多因素的影響,在高併發的情況下:

1sga自動管理,sga的頻繁擴充套件和收縮

2)過渡硬解析,造成library cache中的cursor object被頻繁的reload

3bug

_kks_use_mutex_pin 是隱含引數,通過v$parameter 檢視查不到,需要通過如下SQL 來檢視。

SELECTi.ksppinm name,

i.ksppdesc description,

CV.ksppstvl VALUE,

CV.ksppstdf isdefault,

DECODE(BITAND(CV.ksppstvf,7),

1,'MODIFIED',

4,'SYSTEM_MOD',

'FALSE')

ismodified,

DECODE(BITAND(CV.ksppstvf,2),2,'TRUE','FALSE') isadjusted

FROMsys.x$ksppi i, sys.x$ksppcv CV

WHEREi.inst_id =USERENV('Instance')

ANDCV.inst_id =USERENV('Instance')

AND i.indx =CV.indx

AND i.ksppinm LIKE'/_%'ESCAPE'/'

and i.ksppinm like'_kks%'

ORDERBYREPLACE(i.ksppinm,'_','');

Oracle 引數分類 引數的檢視方法

. 相關測試

[email protected](rac2)> select * from v$version where rownum<2;

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod

SESSION 1:

-------------------------

--建立測試表

[email protected](rac2)> create table t as select * from dba_objects;

Table created.

--檢視session ID

[email protected](rac2)> select sid from v$mystat where rownum=1;

SID

----------

125

[email protected](rac2)> declare

2v_string varchar2(100) := 'alter system flush shared_pool';

3msql varchar2(200);

4begin

5loop

6execute immediate v_string;

7for i in 1..100 loop

8msql:='select object_id from t where object_id='||i;

9execute immediate msql;

10end loop;

11end loop;

12end;

13/

session 2

-------------------------

--檢視session ID

[email protected](rac2)> select sid from v$mystat where rownum=1;

SID

----------

130

[email protected](rac2)> declare

2v_string varchar2(100) := 'alter system flush shared_pool';

3msql varchar2(200);

4begin

5loop

6execute immediate v_string;

7for i in 1..100 loop

8msql:='select object_id from t where object_id='||i;

9execute immediate msql;

10end loop;

11end loop;

12end;

13/

session 3

------------------------

用如下SQL 進行監控,在sqlplus 裡看起來格式有點亂,我放到Toad執行了。

/* Formatted on 2011/6/16 16:06:44 (QP5 v5.163.1008.3004) */

SELECT b.*, sq.sql_text

FROM v$session se,

v$sql sq,

(SELECTa.*, s.sql_text

FROM v$sql s,

(SELECTsid,

event,

wait_class,

p1,

p2raw,

TO_NUMBER(SUBSTR(p2raw,1,4),'xxxx')

sid_hold_mutex_x

FROM v$session_wait

WHERE event LIKE'cursor%')a

WHERE s.HASH_VALUE =a.p1) b

WHERE se.sid= b.sidAND se.sql_hash_value = sq.hash_value;

通過監控發現兩個session在執行相同的sql,他們在相同的cursor object上互動請求a shared mutex pin或者 an exclusive mutex pin 從而造成等待。

--監視sql reae區的cursor object reload情況

[email protected](rac2)>select namespace ,reloads from v$librarycache;

NAMESPACERELOADS

--------------- ----------

SQL AREA790805

TABLE/PROCEDURE103713

BODY59

TRIGGER27

INDEX94280

CLUSTER11

OBJECT0

PIPE0

JAVA SOURCE0

JAVA RESOURCE0

JAVA DATA0

11 rows selected.

--監視parse情況

[email protected](rac2)> col name format a40

[email protected](rac2)> select s.sid, s.serial#,b.name,a.value

2from v$sesstat a, v$statname b, v$session s

3where a.statistic# = b.statistic# and s.sid=a.sid

4and b.name like '%parse%'

5and s.sid in (130,125);

sidserial# namevalue

---------- ---------- ---------------------------------------- ----------

12541915 parse time cpu115260

12541915 parse time elapsed146605

12541915 parse count (total)633792

12541915 parse count (hard)602732

12541915 parse count (failures)4

1306074 parse time cpu69559

1306074 parse time elapsed99149

1306074 parse count (total)394689

1306074 parse count (hard)365538

1306074 parse count (failures)0

從這裡看出,硬解析很多,library cache中的cursor object被頻繁的reload

. 幾個與mutex 相關的檢視

在第一部分,提到了x$mutex_sleep x$mutex_sleep_history。我們在聯機文件裡看不到相關的說明。

不過可以檢視到v$mutex_sleepv$mutex_sleep_history的說明。 但是v$ x$ 字典顯示的列要少。

select * from x$mutex_sleep;

select * from v$mutex_sleep;

相關推薦

Oracle cursor pin S wait on X 等待事件 說明

這個等待事件也算一個常見的等待事件。 在warehouse blog和itpub 上有相關的2個帖子。 連線如下: cursor: pin S wait on X等待事件模擬 cursor

一次cursor: pin S wait on X事件的跟蹤

下午接到維護髮來的郵件,大體記憶體如下: 3月7號晚10點左右,資源管理系統資料庫  gxdb1 發生大量鎖等待,而且出現多個阻塞鎖。活動session數達到350左右, 等待事件為  cursor :  pin s wait  on X 。經殺掉相關session後系

ARCH wait on ATTACH等待事件引起的切換歸檔hang住

現象: alter system switch logfile;  會hang住解決步驟: SQL> select event,count(*) from v$session group by event; EVENT                                          

cursor: pin S產生原理及解決方法

今天晚上在一個比較重要的庫上,CPU嚴重的衝了一下,導致DB響應變慢,大量應用連線timeout,緊接著LISTENER就掛了,連線數也滿了等一連串問題。 我們的監控抓取了當時系統的等待事件,ACTIVE SQL及SESSION_WAIT等待事件,所以問題比較容量定位,檢

37 Oracle深度學習筆記——RAC的相關等待事件

37.Oracle深度學習筆記——RAC的相關等待事件 歡迎轉載,轉載請標明出處:http://blog.csdn.net/notbaron/article/details/50891037 在效能BENCHMARK中碰到的幾個等待事件: gc cr multi block request

ORACLE AWR報告之 log file sync等待事件優化的總結【轉自ITPUB】

 來自白大師(白鱔)對log file sync等待事件優化的總結,供各位puber們學習參考:一、  log file sync平均等待事件時間超過7ms,如果等待時間過長,說明log write每次寫入的時間過長,如果能夠優化redo日誌檔案儲存,使之存放在更快的磁

Oracle 11g下重現library cache lock等待事件

SQL> select sid, event,wait_class, seconds_in_wait   2    from v$session_wait w   3   where w.WAIT_CLASS <> 'Idle';        SID EVENT              

Oracle local write wait等待事件

oracle local write wait Note 1: TypicallyDBWR has to free up some buffers when you want to read something from the disk.During this process the

Commit 函數WAIT = 'X'.

turn dex com llb 供應商 tab cnblogs buffer 創建 BAPI_TRANSACTION_COMMIT IF WAIT EQ SPACE. COMMIT WORK. ELSE. COMMIT WORK AND WAIT. I

What's new on safari 11

link 選擇 var prop timeline asc 規則 coo tex Safari 11.0 針對網頁開發者的新功能 設備媒體調用 Safari 11.0中的新功能 - 支持使用WebRTC的實時通信。 Safari 11.0中的新功能 - 支持對攝像

oracle等待事件LOG FILE SYNC (awr)優化

dlink append 訪問性 wak date 告訴 wakeup 優先級 led log file sycn是ORACLE裏最普遍的等待事件之一,一般log file sycn的等待時間都非常短 1-5ms,不會有什麽問題,但是一旦出問題,往往都比較難解決。什麽時候會

oracle中 常用的 join on 相關和 集合運算的總結

nal 但是 總結 rom 全部 right light style 是把 sql常用聯合查詢的 join on 、 left join(左連接) 、 right join (右連接)、inner join (等值連接)以及常用的集合運算有:union、unionall、m

POJ3006-Dirichlet's Theorem on Arithmetic Progressions

一個個 全部 clu 個數 amp 序列 sin 篩法 The 題意: 設一個等差數列,首元素為a,公差為d 現在要求輸入a,d,n ,要求找出屬於該等差數列中的第n個素數並輸出 思路:空間換時間是個主旋律。素數表的生成用素數篩選法。方法是從2開始,對每個目前還標記為素數的

Oracle RAC 等待事件

發現 pcm 需要 其他 一個數 通過 數據塊 包含 從數據 PCM資源相關的等待事件gc current/cr block request:這個等待事件說明申請實例要申請一個當前塊或CR塊,但是資源主實例的LMS進程還沒有響應它的請求。gc current/cr bloc

Mysql的鎖(S鎖和X鎖的區別)

共享鎖和排它鎖 Mysql的鎖系統:shared lock 和 exclusive lock (共享鎖和排它鎖,也叫讀鎖和寫鎖,即read lock和write lock) 讀鎖是共享的,或者說是相互不阻塞的寫鎖是排他的,一個寫鎖會阻塞其他的寫鎖和讀鎖在實際的資料庫系統中,每時每刻都發生鎖定,當

shell-if表示式(-f,-d,-s,-r,-w,-x,-eq,-ne,-ge,-gt,-le,-lt )

檔案表示式 if [ -f file ] 如果檔案存在 if [ -d … ] 如果目錄存在 if [ -s file ] 如果檔案存在且非空 if [ -r file ] 如果檔案存在且可讀 if [ -w file ] 如果檔案存在且可寫 if [ -x file ] 如果檔案存

macbook安裝低版本的jdk,提示“Oracle 的 Java 要求 Mac OS X 10.7.3 或更高版本”

前言:因為工作原因需要安裝低版本的jdk7,下載了安裝包以後提示如下圖: 這是由於蘋果公司的過,在安裝包裡面加入了版本檢測的程式碼,所以電腦版本過高無法安裝,解決辦法就是就安裝包pkg解壓以後修改裡面的判斷版本的程式碼,然後在打包安裝就可以了。 過程如下: 1

Can't connect to MySQL server on 'x.x.x.x' (10038) mysql資料庫連線不上問題

總結1.防火牆(是否關閉)2. 入站規則(3306)3. 許可權問題(我的是許可權問題) 問題1.2參考:   請自行搜尋我的是問題三誤刪管理員賬戶導致的許可權問題 -------------------------------------------------

Oracle資料庫技術支援】RAC效能分析 - gc buffer busy acquire 等待事件

概述 --------------------- gc buffer busy是RAC資料庫中常見的等待事件,11g開始gc buffer busy分為gc buffer busy acquire和gc buffer busyrelease。 gc buffer busy acquire是當sess

Oracle Cursor Introduction

Cursor Cursors are one of the most common and fundamental terms in the database terminology. It is one of the core database programming concepts, wh