gdb調試之--read by other session 等待事件的重現

轉載請註明出處:http://blog.csdn.net/guoyjoe/article/details/18461845

      發生read by other session 等待事件,肯定是兩個會話同時物理讀同一個數據塊,假設有兩個會話,會話1發生物理讀,會話2正要去物理讀發現會話1正在物讀理產生,此時會話2發生等待,此等待就是read by other session 等待事件。


實驗步驟如下:
1、開會話1,先查出會話1的進程號7376

gyj@OCM> select spid from v$session s,v$process p where s.paddr=p.addr and sid in(select distinct sid from v$mystat);  SPID ------------------------ 7376


2、刷新buffer cache,目的就是讓select發生物理讀

gyj@OCM> alter system flush buffer_cache;  System altered.


3、通過進程號7376,打開gdb

[oracle@mydb ~]$ gdb $ORACLE_HOME/bin/oracle 7376 GNU gdb Fedora (6.8-27.el5) Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.  Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu"... (no debugging symbols found) Attaching to program: /u01/app/oracle/product/11.2.0/bin/oracle, process 7376 Reading symbols from /u01/app/oracle/product/11.2.0/lib/libodm11.so...(no debugging symbols found)...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libodm11.so Reading symbols from /u01/app/oracle/product/11.2.0/lib/libcell11.so...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libcell11.so Reading symbols from /u01/app/oracle/product/11.2.0/lib/libskgxp11.so...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libskgxp11.so Reading symbols from /lib64/librt.so.1...done. Loaded symbols for /lib64/librt.so.1 Reading symbols from /u01/app/oracle/product/11.2.0/lib/libnnz11.so...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libnnz11.so Reading symbols from /u01/app/oracle/product/11.2.0/lib/libclsra11.so...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libclsra11.so Reading symbols from /u01/app/oracle/product/11.2.0/lib/libdbcfg11.so...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libdbcfg11.so Reading symbols from /u01/app/oracle/product/11.2.0/lib/libhasgen11.so...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libhasgen11.so Reading symbols from /u01/app/oracle/product/11.2.0/lib/libskgxn2.so...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libskgxn2.so Reading symbols from /u01/app/oracle/product/11.2.0/lib/libocr11.so...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libocr11.so Reading symbols from /u01/app/oracle/product/11.2.0/lib/libocrb11.so...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libocrb11.so Reading symbols from /u01/app/oracle/product/11.2.0/lib/libocrutl11.so...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libocrutl11.so Reading symbols from /usr/lib64/libaio.so.1...done. Loaded symbols for /usr/lib64/libaio.so.1 Reading symbols from /lib64/libdl.so.2...done. Loaded symbols for /lib64/libdl.so.2 Reading symbols from /lib64/libm.so.6...done. Loaded symbols for /lib64/libm.so.6 Reading symbols from /lib64/libpthread.so.0...done. [Thread debugging using libthread_db enabled] [New Thread 0x2b0b8fef0910 (LWP 7376)] Loaded symbols for /lib64/libpthread.so.0 Reading symbols from /lib64/libnsl.so.1...done. Loaded symbols for /lib64/libnsl.so.1 Reading symbols from /lib64/libc.so.6...done. Loaded symbols for /lib64/libc.so.6 Reading symbols from /lib64/ld-linux-x86-64.so.2...done. Loaded symbols for /lib64/ld-linux-x86-64.so.2 Reading symbols from /usr/lib64/libnuma.so.1...done. Loaded symbols for /usr/lib64/libnuma.so.1 Reading symbols from /lib64/libnss_files.so.2...done. Loaded symbols for /lib64/libnss_files.so.2 Reading symbols from /u01/app/oracle/product/11.2.0/lib/libnque11.so...done. Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libnque11.so 0x0000003f0d40d290 in __read_nocancel () from /lib64/libpthread.so.0 (gdb)  


4、在會話1,執行select語句,此時select被阻塞

gyj@OCM> select * from gyj_test where id=1;


5、在gdb設斷點,用等待事件的函數,並運行

(gdb) b kslwtbctx Breakpoint 1 at 0x8f9a5c2 (gdb) c Continuing.


6、查等待事件kslwtbctx函數的第一個參數,用命令info all-register顯示寄存器

(gdb) info all-register rax            0x62657100       1650815232 rbx            0x15c    348 rcx            0x0      0 rdx            0x1      1 rsi            0x7a59   31321 rdi            0x7fff1c576d40   140733668879680 rbp            0x7fff1c576ce0   0x7fff1c576ce0 rsp            0x7fff1c576ce0   0x7fff1c576ce0 r8             0x2      2 r9             0x25     37 r10            0x7      7 r11            0x0      0 r12            0x0      0 r13            0xbb0c348        196133704 r14            0xbb09d40        196123968 r15            0x1      1 rip            0x8f9a5c2        0x8f9a5c2 <kslwtbctx+4> eflags         0x246    [ PF ZF IF ] cs             0x33     51 ss             0x2b     43 ds             0x0      0 es             0x0      0 fs             0x0      0 gs             0x0      0 st0            0        (raw 0x00000000000000000000) ---Type <return> to continue, or q <return> to quit--- st1            0        (raw 0x00000000000000000000) st2            0        (raw 0x00000000000000000000) st3            0        (raw 0x00000000000000000000) st4            0        (raw 0x00000000000000000000) st5            0        (raw 0x00000000000000000000) st6            73280    (raw 0x400f8f20000000000000) st7            73280    (raw 0x400f8f20000000000000) fctrl          0x27f    639 fstat          0x0      0 ftag           0xffff   65535 fiseg          0x0      0 fioff          0x9394e95        154750613 foseg          0x7fff   32767 fooff          0x1c573f50       475479888 fop            0x0      0 


7、找到第一個參數
rdi            0x7fff1c576d40

8、用x/32命令查內存中32個字節

gdb) x/32 0x7fff1c576d40 0x7fff1c576d40: 0x1c577a59      0x00007fff      0x1c576e50      0x00007fff 0x7fff1c576d50: 0x1c576ee0      0x00007fff      0x0918adf2      0x00000000 0x7fff1c576d60: 0x00000000      0x00000000      0x00000000      0x00000000 0x7fff1c576d70: 0x00000000      0x00000001      0x00000000      0x00000000 0x7fff1c576d80: 0x002adb17      0x00000000      0x00000000      0x00000000 0x7fff1c576d90: 0x00000000      0x00000000      0x00000001      0x00000000 0x7fff1c576da0: 0x09b958cc      0x00000000      0x0000015c      0x00000000 0x7fff1c576db0: 0x7fffffff      0x00000000      0x62657100      0x00000000


9、找到0x0000015c,通過此等待事件號,找等待事件

gyj@OCM> select  name from v$event_name where event# in(select to_number('15c','xxxxxxxxxxxxxx') from dual);   NAME ---------------------------------------------------------------- SQL*Net message to client


10、重複第5、6、7、8、9步(注用從第5步的c命令開始)

(gdb) c Continuing.  Breakpoint 1, 0x0000000008f9a5c2 in kslwtbctx () (gdb) info all-register rax            0x0      0 rbx            0x2000   8192 rcx            0x0      0 rdx            0x0      0 rsi            0x0      0 rdi            0x7fff1c574c38   140733668871224 rbp            0x7fff1c574970   0x7fff1c574970 rsp            0x7fff1c574970   0x7fff1c574970 r8             0x5bbb295        96187029 r9             0x2f8b5f0        49853936 r10            0x52da848e       1390052494 r11            0x2b0b9057e7a8   47328666314664 r12            0x99837da8       2575531432 r13            0x0      0 r14            0x0      0 r15            0x99437498       2571334808 rip            0x8f9a5c2        0x8f9a5c2 <kslwtbctx+4> eflags         0x246    [ PF ZF IF ] cs             0x33     51 ss             0x2b     43 ds             0x0      0 es             0x0      0 fs             0x0      0 gs             0x0      0 st0            0        (raw 0x00000000000000000000) ---Type <return> to continue, or q <return> to quit--- st1            0        (raw 0x00000000000000000000) st2            0        (raw 0x00000000000000000000) st3            0        (raw 0x00000000000000000000) st4            0        (raw 0x00000000000000000000) st5            0        (raw 0x00000000000000000000) st6            73280    (raw 0x400f8f20000000000000) st7            73280    (raw 0x400f8f20000000000000) fctrl          0x27f    639 fstat          0x0      0 ftag           0xffff   65535 fiseg          0x0      0 fioff          0x9394e95        154750613 foseg          0x7fff   32767 fooff          0x1c573f50       475479888 fop            0x0      0 xmm0           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000} xmm1           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000} xmm2           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000} xmm3           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0, 0x0, 0x0, 0x0, 0x54, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x354, 0x1, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x10354, 0x0, 0x0}, v2_int64 = {     0x1035400000000, 0x0}, uint128 = 0x00000000000000000001035400000000} xmm4           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x64, 0x0 <repeats 15 times>}, v8_int16 = {0x64, 0x0,  ---Type <return> to continue, or q <return> to quit---     0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x64, 0x0, 0x0, 0x0}, v2_int64 = {0x64, 0x0}, uint128 = 0x00000000000000000000000000000064} xmm5           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x32, 0xa3, 0xd7, 0x2, 0x0 <repeats 12 times>},    v8_int16 = {0xa332, 0x2d7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x2d7a332, 0x0, 0x0, 0x0}, v2_int64 = {0x2d7a332, 0x0},    uint128 = 0x00000000000000000000000002d7a332} xmm6           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000} xmm7           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0xda, 0x87, 0xd7, 0x2, 0x0 <repeats 12 times>},    v8_int16 = {0x87da, 0x2d7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x2d787da, 0x0, 0x0, 0x0}, v2_int64 = {0x2d787da, 0x0},    uint128 = 0x00000000000000000000000002d787da} xmm8           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000} xmm9           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000} xmm10          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000} xmm11          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000} xmm12          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x18, 0xe, 0x73, 0x90, 0xb, 0x2b, 0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0xe18, 0x9073, 0x2b0b, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x90730e18, 0x2b0b, 0x0, 0x0},    v2_int64 = {0x2b0b90730e18, 0x0}, uint128 = 0x000000000000000000002b0b90730e18} xmm13          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000} xmm14          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0,      0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000} xmm15          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0,  ---Type <return> to continue, or q <return> to quit---     0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000} mxcsr          0x1fa1   [ IE PE IM DM ZM OM UM PM ] (gdb)  (gdb) x/32 0x7fff1c574c38 0x7fff1c574c38: 0x08f97a59      0x00000000      0x9079c6d8      0x00002b0b 0x7fff1c574c48: 0x90742970      0x00002b0b      0x9079c748      0x00002b0b 0x7fff1c574c58: 0x1c574df0      0x00007fff      0x9079c748      0x00002b0b 0x7fff1c574c68: 0x9079c6d8      0x00002b0b      0x00000000      0x00000000 0x7fff1c574c78: 0x00000000      0x00000000      0x00000013      0x20000000 0x7fff1c574c88: 0x00000000      0x00000000      0x00000001      0x00000000 0x7fff1c574c98: 0x0a0fcd50      0x00000000      0x00000092      0x00000000 0x7fff1c574ca8: 0x7fffffff      0x00000000      0x00000006      0x00000000 (gdb)  



11、找到0x00000092,通過此等待事件號,找等待事件0x00000092

gyj@OCM> gyj@OCM> select  name from v$event_name where event# in(select to_number('92','xxxxxxxxxxxxxx') from dual);   NAME ---------------------------------------------------------------- db file sequential read

說明此時會話1發生了物理讀(db file sequential read等待事件你懂我)



12、打開會話2(此會話2號的SID=146),並在會話2執行SELECT語句,此時SELECT也被阻塞了

gyj@OCM> select sid from v$mystat where rownum=1;         SID ----------        146   gyj@OCM> select * from gyj_test where id=1;


13、打開一個會話3,看會話2(此會話2號的SID=146)的等待事件

sys@OCM> select sid ,event from v$session_wait where sid=146 and wait_class<>'Idle';         SID EVENT ---------- ----------------------------------------------------------------        146 read by other session 


哈哈。。。終於發現了read by other session等待事件,以後可以用同樣的方法去研究其它等待事件!


QQ:252803295

技術交流QQ羣:
DSI&Core Search  Ⅰ 羣:127149411(2000人技術羣:未滿)
DSI&Core Search  Ⅱ 羣:177089463(1000人技術羣:未滿)
DSI&Core Search  Ⅲ 羣:284596437(500人技術羣:未滿)
DSI&Core Search  Ⅳ 羣:192136702(500人技術羣:未滿)
DSI&Core Search  Ⅴ 羣:285030382(500人閒聊羣:未滿)


MAIL:dbathink@hotmail.com

BLOG: http://blog.csdn.net/guoyjoe

WEIBO:http://weibo.com/guoyJoe0218

ITPUB: http://www.itpub.net/space-uid-28460966.html

OCM:   http://education.oracle.com/education/otn/YGuo.HTM 

ACONG:  http://www.acoug.org/category/membership



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章