oracle等待事件之cursor:pin S wait on X

来源:这里教程网 时间:2026-03-03 13:56:38 作者:

cursor:pin S wait on X  什么是cursor:pin S wait on X 等待事件? 当一个会话尝试得到一个mutex pin的时候,但是其他会话正在以exclusive模式持有相同cursor object的mutex,此时申请mutex pin的会话等待事件即为cursor:pin S wait on X 。 造成该等待事件的原因: 1.shared pool设置太小,或者由于自动内存管理导致的。 2.频繁的硬解析 3.子游标太多 4.BUG 5.解析错误 关于解析错误,可以通过设置10035事件开启记录解析错误的sql到alert.log中。 ALTER SYSTEM SET EVENTS '10035 trace name context forever, level 1'; 如何定位问题会话和sql呢? 首先通过v$event_name查看p1 p2 p3含义: SYS@cdbtest1(CDB$ROOT)> set line 100 SYS@cdbtest1(CDB$ROOT)> select PARAMETER1,PARAMETER2,PARAMETER3 from v$event_name where name='cursor: pin S wait on X'; PARAMETER1                     PARAMETER2                     PARAMETER3 ------------------------------ ------------------------------ ------------------------------ idn                            value                          where p1值是Mutex identifier,与sql的hash value匹配可以得到具体的sql,可以用下面的sql查询,注意不要填成了p1raw值。 SELECT sql_id, sql_text, version_count     FROM V$SQLAREA where HASH_VALUE='000000001A27969A';     p2值是Mutex value。高8位包含了持有mutex的会话的sid信息,也就是holder的sid;低8位是reference count值,如果都是0的话,那么证明该持有者以X模式持有。比如p2raw:0000005200000000    SELECT decode(trunc(0000005200000000/4294967296),            0,trunc(0000005200000000/65536),      trunc(0000005200000000/4294967296)) SID_HOLDING_MUTEX  FROM dual;  352187318272  21474836480 p3值是被请求的mutex的地址,可以用下面的sql查询 SELECT MUTEX_TYPE, LOCATION     FROM x$mutex_sleep   WHERE mutex_type like 'Cursor Pin%'      and location_id in (  SELECT decode(trunc(&&P3/4294967296),     0,trunc(&&P3/65536),       trunc(&&P3/4294967296)) LOCATION_ID  FROM dual);  

相关推荐