zoukankan      html  css  js  c++  java
  • 模拟cursor pin S wait on X

    <pre name="code" class="sql">模拟cursor pin S wait on X
    
    create table test tablespace users as select *from dba_objects;  
    
    BEGIN
      DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'TEST',
                                    tabname          => 'TEST',
                                    estimate_percent => 30,
                                    method_opt       => 'for all columns size repeat',
                                    no_invalidate    => FALSE,
                                    degree           => 8,
                                    cascade          => TRUE);
    END;
    /
    
    
    测试开始:
    这是10.2版本提出的mutex(互斥)机制用来解决library cache bin latch争夺问题引入的新事件,是否使用这种机制受到隐含参数_kks_use_mutex_pin的限制,从10.2.0.2开始该参数default为true,使用
    
    这种机制oracle是为了解决library cache bin latch的串行使用问题,但是mutex貌似还不是很稳定,在很多系统中会出现cursor: pin S wait on X等待事件,这个事件和mutex的使用有关:
    SQL> SELECT nam.ksppinm NAME, val.ksppstvl VALUE
      2  FROM x$ksppi nam, x$ksppsv val
      3  WHERE nam.indx = val.indx AND nam.ksppinm LIKE '%mutex%'
      4  ORDER BY 1;
    NAME                                               VALUE
    -------------------------------------------------- ----------------------------------------
    _kks_use_mutex_pin                                 TRUE
    
    SQL> select * from v$version;
    
    BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
    PL/SQL Release 10.2.0.4.0 - Production
    CORE	10.2.0.4.0	Production
    TNS for Linux: Version 10.2.0.4.0 - Production
    NLSRTL Version 10.2.0.4.0 - Production
    
    测试数据库版本:
    SQL> SELECT nam.ksppinm NAME, val.ksppstvl VALUE
      FROM x$ksppi nam, x$ksppsv val
     WHERE nam.indx = val.indx
       AND nam.ksppinm LIKE '%mutex%'
     ORDER BY 1;  2    3    4    5  
    
    NAME							     VALUE
    ------------------------------------------------------------ ----------
    _kks_use_mutex_pin					     TRUE
    
    
    
    
    select SESSION_ID,
    ash.sample_time,
           NAME,
           P1,
           P2,
           P3,
           WAIT_TIME,
           CURRENT_OBJ#,
           CURRENT_FILE#,
           CURRENT_BLOCK#
      from v$active_session_history ash, v$event_name enm
     where ash.event# = enm.event#
    
            SESSION_ID   SANMPLE_TIME                 NAME                    P1            P2
    1	1629	08-7月 -14 01.24.43.480 上午	cursor: pin S	          870994415	1	327689	0	-1	0	0
    2	1629	08-7月 -14 01.24.42.480 上午	cursor: pin S	          870994415	1	327689	0	-1	0	0
    3	1626	08-7月 -14 01.24.41.480 上午	cursor: pin S wait on X	  914340628	106758144	327686	0	-1	0	0
    4	1627	08-7月 -14 01.24.40.480 上午	cursor: pin S	          1774050780	1	589825	0	-1	0	0
    5	1626	08-7月 -14 01.24.39.470 上午	cursor: pin S wait on X	  202989082	106758144	327687	0	-1	0	0
    6	1624	08-7月 -14 01.24.38.470 上午	cursor: pin S wait on X	  172408315	106758144	327685	0	-1	0	0
    7	1624	08-7月 -14 01.24.37.470 上午	cursor: pin S	          4107572888	106627073	327687	0	-1	0	0
    8	1634	08-7月 -14 01.24.37.470 上午	latch: library cache	  589581072	215	0	0	-1	0	0
    9	1624	08-7月 -14 01.24.36.470 上午	cursor: pin S	          4107572888	106627073	327687	0	-1	0	0
    10	1627	08-7月 -14 01.24.35.470 上午	latch: library cache	  589581072	215	0	0	-1	0	0
    11	1634	08-7月 -14 01.24.35.470 上午	cursor: pin S wait on X	  4718305	106627072	327688	0	-1	0	0
    
    
    select SESSION_ID,
    ash.sample_time,
           NAME,
           P1,
           P2,
           P3,
           WAIT_TIME,
           CURRENT_OBJ#,
           CURRENT_FILE#,
           CURRENT_BLOCK#
      from v$active_session_history ash, v$event_name enm
     where ash.event# = enm.event#
    1	1631	08-7月 -14 01.14.57.196 上午	cursor: pin S wait on X	3719301976	0	327681	0	-1	0	0
    
    
    select b.*, sq.sql_text
      from v$session se,
           v$sql sq,
           (select a.*, s.sql_text
              from v$sql s,
                   (select sid,
                           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.sid
       and se.sql_hash_value = sq.hash_value;
    
            SID      EVENT                                                                 sid_hold_mutex_x
    1	1637	cursor: pin S wait on X	Concurrency	4286791313	065F0000	1631	select object_id from test t where object_id=89	declare   v_string varchar2(100) 
    
    := 'alter system flush shared_pool';   msql     varchar2(200); begin   loop     for i in 1 .. 100 loop       msql := 'select object_id from test t where object_id=' || i;       
    
    execute immediate msql;     end loop;   end loop; end;
    
                                                                        sid_hold_mutex_x 
    1	1627	cursor: pin S	Other	868910173	065D0001	1629	select object_id from test t where object_id=3	select object_id from test t where object_id=3
    
    
                                                                                        sid_hold_mutex_x
    2	1631	cursor: pin S wait on X	Concurrency	4107572888	065B0000	1627	select object_id from test t where object_id=100	select object_id from 
    
    test t where object_id=60


    
                                        
    
  • 相关阅读:
    Java程序员从笨鸟到菜鸟全部博客目录
    Problem I
    Problem I
    Problem S
    Problem S
    Problem X
    Problem X
    Problem Q
    Problem Q
    Ellipse
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352231.html
Copyright © 2011-2022 走看看