;spin count loop: 1 a875be skgpwwait -331400584, 202182304, 0, 70000 kslskgs 60009a18, 0, -331400368, -331399824 spin count loop: 2000 a875be spin count loop: 1999 a875be spin count loop: 1998 a875be ... spin count loop: 1 a875be skgpwwait -331400584, 202182304, 0, 50000 kslskgs 60009a18, 0, -331400368, -331399824 spin count loop: 2000 a875be spin count loop: 1999 a875be ... spin count loop: 2 a875be spin count loop: 1 a875be skgpwwait -331400584, 202182304, 0, 50000 kslskgs 60009a18, 0, -331400368, -331399824 spin count loop: 2000 a875be spin count loop: 1999 a875be ... spin count loop: 1963 a875be spin count loop: 1962 a875be spin count loop: 1961 a875be ---Type <return> to continue, or q <return> to quit---q Quit --//注意看skgpwwait最后参数,实际上就是sleep的时间,单位微秒.spin count不是10,而是2000.
(gdb) info br 10 Num Type Disp Enb Address What 10 breakpoint keep y 0x0000000000a875be <kslskgs+200> breakpoint already hit 18041 times silent printf " spin count loop: %d %x\n", $r13,$rip c
--//使用跟踪可以发现如下: $ strace -fttT -p 31247 Process 31247 attached - interrupt to quit 11:06:41.497253 select(0, [], [], [], {0, 40191}) = 0 (Timeout) <0.040333> 11:06:41.537915 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050145> 11:06:41.588209 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050140> 11:06:41.638518 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050108> 11:06:41.688774 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050146> 11:06:41.739070 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050147> 11:06:41.789366 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050110> 11:06:41.839640 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050141> 11:06:41.889947 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050143> 11:06:41.940240 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050121> 11:06:41.990509 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050153> 11:06:42.040831 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050145> 11:06:42.091124 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050151> 11:06:42.141462 select(0, [], [], [], {0, 50000}) = 0 (Timeout) <0.050161> ...
总结: 1.不要在生产系统做这样测试. 2.shared latch 持有X 模式,申请 X 模式阻塞,spin_count=_spin_count.与exclusive latch不同. 3.对于修改latch类的参数仅仅sleepN参数有效. 4.其它模式比如SX,XS.另外写一篇blog测试.我看了连接,我还忘记考虑Blocking mode下的情况. --//链接: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
- |