[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 getHeld in S mode Compatible 2*_spin_countHeld in X mode 0 2*_spin_countBlocking mode 0 2*_spin_count1.环境:SCOTT@book> @ ver1PORT_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 ProductionSYS@book> @ hide spin_countNAME 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 sysdbacol laddr new_value laddrcol vmode new_value vmodeselect 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 setmypidoradebug call kslgetsl_w 0x&laddr &&2 &&3 &&4 &vmodehost sleep &&6oradebug 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 Y2.测试一些细节不再列出,参考链接: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.gdbBreakpoint 1 at 0x93f97a8Breakpoint 2 at 0x93f9b74Breakpoint 3 at 0x9808932Breakpoint 4 at 0x9809840Breakpoint 5 at 0x37990d6400Breakpoint 6 at 0x93f9ddcBreakpoint 7 at 0x93faa36Breakpoint 8 at 0xa865caBreakpoint 9 at 0xa874faBreakpoint 10 at 0xa875be(gdb) cContinuing....kslgetl 6010d860, 1, 2126093176, 3991ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:95, mode:8ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:95, mode:8ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:95, mode:8ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16ksl_get_shared_latch laddr:60009a18, willing:1, where:3, why:4, mode:8kslgess 60009a18, 8, 0, 3kslskgs 60009a18, 0, 1129096976, 1129097520kslskgs 60009a18, 0, 1129096976, 1129097520---Type <return> to continue, or q <return> to quit---skgpwwait 1129096760, 202182304, -2044672536, 0sskgpwwait 1129096760, 202182304, -2044672536, 0semop 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:8ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16ksl_get_shared_latch laddr:60009a18, willing:1, where:3, why:4, mode:16kslgess 60009a18, 16, 0, 3kslskgs 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 a875bekslskgs 60009a18, 0, 1129096976, 1129097520 spin count loop: 1 a875beskgpwwait 1129096760, 202182304, -2044672536, 0sskgpwwait 1129096760, 202182304, -2044672536, 0semop 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=31572SYS@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:8ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:96, mode:16ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:8kslgess 60009a18, 8, 0, 5kslskgs 60009a18, 0, -1923148048, -1923147504kslskgs 60009a18, 0, -1923148048, -1923147504skgpwwait -1923148264, 202182304, -2044655416, 0sskgpwwait -1923148264, 202182304, -2044655416, 0semop 315588608, -1923148464, 1, -1kslskgs 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=31572SYS@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:16ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:16kslgess 60009a18, 16, 0, 5kslskgs 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 a875bekslskgs 60009a18, 0, -1923148048, -1923147504 spin count loop: 1 a875beskgpwwait -1923148264, 202182304, -2044655416, 0sskgpwwait -1923148264, 202182304, -2044655416, 0semop 315588608, -1923148464, 1, -1kslskgs 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:16ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:8kslgess 60009a18, 8, 0, 5kslskgs 60009a18, 0, -1923148048, -1923147504kslskgs 60009a18, 0, -1923148048, -1923147504skgpwwait -1923148264, 202182304, -2044655416, 0sskgpwwait -1923148264, 202182304, -2044655416, 0semop 315588608, -1923148464, 1, -1kslskgs 60009a18, 0, -1923148048, -1923147504--//XSX的情况:ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:96, mode:16ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:16kslgess 60009a18, 16, 0, 5kslskgs 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, 0semop 315588608, -1923148464, 1, -1kslskgs 60009a18, 0, -1923148048, -1923147504 spin count loop: 2000 a875be--//总之:阻塞申请X mode,spin_count=2000.S mode 直接调用semop休眠.5.总结--//画一个表格: S mode get X mode getHeld in S mode Compatible _spin_countHeld in X mode 0 _spin_countBlocking mode 0 _spin_count