zoukankan      html  css  js  c++  java
  • [20190419]shared latch spin count 2.txt

    [20190419]shared latch spin count 2.txt

    --//上午测试shared latch XX模式的情况,链接:http://blog.itpub.net/267265/viewspace-2641902/
    --//继续测试其它情况.
    --//链接:http://andreynikolaev.wordpress.com/2011/01/14/spin-tales-part-2-shared-latches-in-oracle-9-2-11g/

                    S mode get  X mode get
    Held in S mode  Compatible  2*_spin_count
    Held in X mode           0  2*_spin_count
    Blocking mode            0  2*_spin_count


    1.环境:
    SCOTT@book> @ ver1
    PORT_STRING                    VERSION        BANNER
    ------------------------------ -------------- --------------------------------------------------------------------------------
    x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

    SYS@book> @ hide spin_count
    NAME              DESCRIPTION                        DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE
    ----------------- ---------------------------------- ------------- ------------- ------------
    _mutex_spin_count Mutex spin count                   TRUE          255           255
    _spin_count       Amount to spin waiting for a latch TRUE          2000          2000

    $ cat shared_latch.txt
    /* 参数如下: @ latch.txt latch_name willing why where mode sleep_num */
    --//connect / as sysdba
    col laddr new_value laddr
    col vmode  new_value vmode
    select decode(lower('&&5'),'s',8,'x',16,'8',8,'16',16) vmode from dual ;
    SELECT addr laddr FROM v$latch_parent WHERE NAME='&&1';
    oradebug setmypid
    oradebug call kslgetsl_w 0x&laddr &&2 &&3 &&4  &vmode
    host sleep &&6
    oradebug call kslfre 0x&laddr
    --//exit
    --//注:我前几天的测试脚本有connect / as sysdba,exit这两行,我为了调式方便,先注解这2行,避免反复退出进入会话.

    2.测试1:
    --//选择一个shared latch测试,我选择"test shared non-parent l0" latch测试:
    SYS@book> select * from shared_latches where name='test shared non-parent l0';
    VERSION    LATCH# NAME                      S
    ---------- ------ ------------------------- -
    11.2.0.4.0      6 test shared non-parent l0 Y

    2.测试一些细节不再列出,参考链接:http://blog.itpub.net/267265/viewspace-2641902/
    --//测试XS模式的情况:
    --//session 1:
    SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 1 2 x 100000

    --//session 2:
    SYS@book> @ spid
           SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
    ---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
             1         11 31454                    DEDICATED 31455       24          5 alter system kill session '1,11' immediate;
    --//记下spid=31455.
    SYS@book> @shared_latch.txt "test shared non-parent l0" 1 3 4 s 1
    --//注意session 申请S mode.
    --//window 3:执行:

    $ rlwrap gdb -p 31455 -x spin_s.gdb
    Breakpoint 1 at 0x93f97a8
    Breakpoint 2 at 0x93f9b74
    Breakpoint 3 at 0x9808932
    Breakpoint 4 at 0x9809840
    Breakpoint 5 at 0x37990d6400
    Breakpoint 6 at 0x93f9ddc
    Breakpoint 7 at 0x93faa36
    Breakpoint 8 at 0xa865ca
    Breakpoint 9 at 0xa874fa
    Breakpoint 10 at 0xa875be
    (gdb) c
    Continuing.
    ...
    kslgetl 6010d860, 1, 2126093176, 3991
    ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16
    ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:95, mode:8
    ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16
    ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:95, mode:8
    ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16
    ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:95, mode:8
    ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16
    ksl_get_shared_latch laddr:60009a18, willing:1, where:3, why:4, mode:8
    kslgess 60009a18, 8, 0, 3
    kslskgs 60009a18, 0, 1129096976, 1129097520
    kslskgs 60009a18, 0, 1129096976, 1129097520
    ---Type <return> to continue, or q <return> to quit---
    skgpwwait 1129096760, 202182304, -2044672536, 0
    sskgpwwait 1129096760, 202182304, -2044672536, 0
    semop 315588608, 1129096560, 1, -1
    --//按ctrl+c出现如下:
    kslskgs 60009a18, 0, 1129096976, 1129097520

    --//可以看出X模式的情况,申请S mode,第2进程直接调用semop.根本不做spin操作.

    3.测试2:
    --//测试SX模式的情况:
    --//session 1:
    SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 1 2 s 100000
    --//session 持有S mode.
     
    --//session 2:
    SYS@book> @shared_latch.txt "test shared non-parent l0" 1 3 4 x 1
    --//注意session 申请x mode.
    --//window 3:执行:
    $ rlwrap gdb -p 31455 -x spin_s.gdb
    ..
    ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:95, mode:8
    ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16
    ksl_get_shared_latch laddr:60009a18, willing:1, where:3, why:4, mode:16
    kslgess 60009a18, 16, 0, 3
    kslskgs 60009a18, 0, 1129096976, 1129097520
     spin count loop: 2000 a875be
     spin count loop: 1999 a875be
     spin count loop: 1998 a875be
     spin count loop: 1997 a875be
     ...
     spin count loop: 3 a875be
     spin count loop: 2 a875be
     spin count loop: 1 a875be
    kslskgs 60009a18, 0, 1129096976, 1129097520
     spin count loop: 1 a875be
    skgpwwait 1129096760, 202182304, -2044672536, 0
    sskgpwwait 1129096760, 202182304, -2044672536, 0
    semop 315588608, 1129096560, 1, -1
    --//按ctrl+c后.
    kslskgs 60009a18, 0, 1129096976, 1129097520
     spin count loop: 2000 a875be
     
    --//可以S模式的情况,申请X mode,第2进程spin_count=2000.

    4.测试3:
    --//Blocking mode,首先我对这个模式的理解不是非常清晰.
    --//我的理解
    A.当前X mode持有,不管S,X模式申请都会阻塞,再有进程申请的情况.
    B.当前S mode持有,X模式申请,后续再有进程申请的情况.
    --//也就是这个情况至少3个会话,我分别测试看看
    --//session 1:
    SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 1 2 s 100000

    --//session 2:
    SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 3 4 x 1

    --//session 3:
    --//spid=31572
    SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 5 6 s 1

    --//gdb监测session 3进程:
    $ rlwrap gdb -p 31572 -x spin_s.gdb
    ...
    ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:95, mode:8
    ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:96, mode:16
    ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:8
    kslgess 60009a18, 8, 0, 5
    kslskgs 60009a18, 0, -1923148048, -1923147504
    kslskgs 60009a18, 0, -1923148048, -1923147504
    skgpwwait -1923148264, 202182304, -2044655416, 0
    sskgpwwait -1923148264, 202182304, -2044655416, 0
    semop 315588608, -1923148464, 1, -1
    kslskgs 60009a18, 0, -1923148048, -1923147504
    --//申请S mode,没有spin.

    --//session 1:
    SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 1 2 s 100000

    --//session 2:
    SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 3 4 x 1

    --//session 3:
    --//spid=31572
    SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 5 6 x 1

    --//gdb监测session 3进程:
    $ rlwrap gdb -p 31572 -x spin_s.gdb
    ...
    ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:96, mode:16
    ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:16
    kslgess 60009a18, 16, 0, 5
    kslskgs 60009a18, 0, -1923148048, -1923147504
     spin count loop: 2000 a875be
     spin count loop: 1999 a875be
     spin count loop: 1998 a875be
     spin count loop: 1997 a875be
     ...
     spin count loop: 1 a875be
    kslskgs 60009a18, 0, -1923148048, -1923147504
     spin count loop: 1 a875be
    skgpwwait -1923148264, 202182304, -2044655416, 0
    sskgpwwait -1923148264, 202182304, -2044655416, 0
    semop 315588608, -1923148464, 1, -1
    kslskgs 60009a18, 0, -1923148048, -1923147504
     spin count loop: 2000 a875be
    --//申请X mode,spin_count=2000.

    --//XSS的情况:
    ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:96, mode:16
    ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:8
    kslgess 60009a18, 8, 0, 5
    kslskgs 60009a18, 0, -1923148048, -1923147504
    kslskgs 60009a18, 0, -1923148048, -1923147504
    skgpwwait -1923148264, 202182304, -2044655416, 0
    sskgpwwait -1923148264, 202182304, -2044655416, 0
    semop 315588608, -1923148464, 1, -1
    kslskgs 60009a18, 0, -1923148048, -1923147504

    --//XSX的情况:
    ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:96, mode:16
    ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:16
    kslgess 60009a18, 16, 0, 5
    kslskgs 60009a18, 0, -1923148048, -1923147504
     spin count loop: 2000 a875be
     spin count loop: 1999 a875be
     spin count loop: 1998 a875be
     spin count loop: 1997 a875be
     spin count loop: 1996 a875be
     spin count loop: 1995 a875be
    ...
    sskgpwwait -1923148264, 202182304, -2044655416, 0
    semop 315588608, -1923148464, 1, -1
    kslskgs 60009a18, 0, -1923148048, -1923147504
     spin count loop: 2000 a875be
    --//总之:阻塞申请X mode,spin_count=2000.S mode 直接调用semop休眠.

    5.总结
    --//画一个表格:
                    S mode get  X mode get
    Held in S mode  Compatible  _spin_count
    Held in X mode           0  _spin_count
    Blocking mode            0  _spin_count

  • 相关阅读:
    Qt 资料大全
    Node.js+websocket+mongodb实现即时聊天室
    win系统下nodejs安装及环境配置
    nginx关于 error_page指令详解.md
    移动前端开发之viewport,devicePixelRatio的深入理解
    Iphone各个型号机型的详细参数,尺寸和dpr以及像素
    H5前端的关于像素解释
    从Pc转向H5开发遇到的适配问题思考
    Safari无痕模式下,storage被禁用问题
    滴滴开源 Vue 组件库— cube-ui
  • 原文地址:https://www.cnblogs.com/lfree/p/10735083.html
Copyright © 2011-2022 走看看