[20240921]跟踪library cache lock library cache pin使用gdb(补充测试).txt
--//补充测试,session 1执行exec lcp,sessin 2执行alter procedure lcp compile;sessin 3执行alter procedure lcp compile;
--//然后kill -9 session 2,看看sessin 3的相关等待事件,再kill -9 session 1,看看sessin 3的相关等待事件。
1.环境:
SCOTT@book01p> @ver2
==============================
PORT_STRING : x86_64/Linux 2.4.xx
VERSION : 21.0.0.0.0
BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID : 0
PL/SQL procedure successfully completed.
SYS@book> @ sed "library cache pin"
SYS@book> @ pr
==============================
SED_EVENT# : 375
SED_NAME : library cache pin
SED_WAIT_CLASS : Concurrency
SED_P1 : handle address
SED_P2 : pin address
SED_P3 : 100*mode+namespace
SED_EQ_NAME :
SED_REQ_REASON :
SED_REQ_DESCRIPTION :
PL/SQL procedure successfully completed.
--//library cache lock类似
--//grant execute on sys.dbms_lock to scott;
create procedure lcp
is
begin
sys.dbms_lock.sleep(3600);
end;
/
$ cat lkpn.gdb2
set pagination off
set logging file /tmp/lkpn.log
set logging overwrite on
set logging on
set $lk = 0
set $pn = 0
set $lock = 0
#break kgllkal if $rcx==3
#break kgllkal if ( $rcx==3 && $rdx==0x00000000670C9E58 )
#break kgllkal if $rdx==0x00000000670C9E58
break kgllkal
commands
silent
printf "kgllkal count %02d -- handle address: %016x, mode: %d ", ++$lk ,$rdx ,$rcx
echo kglnaobj address:
x/s $rdx+0x1c8
c
end
#break kglpnal if $rcx==3
#break kglpnal if $rdx==0x00000000635F4DA0
break kglpnal
commands
silent
printf "kglpnal count %02d -- handle address: %016x, mode: %d ", ++$pn ,$rdx ,$rcx
echo kglnaobj address:
x/s $rdx+0x1c8
c
end
#break kglGetSO
#commands
# silent
# finish
#end
break *0x0000000015367fbe
commands
silent
printf "kglGetS0 return lock address : %016x\n", $rdx
c
end
break *0x1536c16a
commands
silent
printf "kglGetS0 return pin address : %016x\n", $rdx
c
end
2.测试:
--//session 1:
SCOTT@book01p(149,63787)> exec lcp
--//session 2:
SCOTT@book01p(404,9633)> alter procedure lcp compile;
--//session 3:
SCOTT@book01p(146,11322)> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- ------------------------------ ------- ---------- --------------------------------------------------
146 11322 4396 DEDICATED 4398 73 4 alter system kill session '146,11322' immediate;
SCOTT@book01p(146,11322)> alter procedure lcp compile;
--//window 1:
$ rlgdb -f -p 4398 -x lkpn.gdb2
...
/usr/src/debug/glibc-2.17-c758a686/sysdeps/unix/syscall-template.S:81:3374:beg:0x7f873ab47480
Breakpoint 1 at 0x15367e90
Breakpoint 2 at 0x1536c020
Breakpoint 3 at 0x15367fbe
Breakpoint 4 at 0x1536c16a
(gdb) c
Continuing.
kgllkal count 01 -- handle address: 000000006b0a7390, mode: 1 kglnaobj address:0x6b0a7558: "alter procedure lcp compile"
kglGetS0 lock address : 0000000066610a00
kgllkal count 02 -- handle address: 00000000643f44b0, mode: 1 kglnaobj address:0x643f4678: ""
kglGetS0 lock address : 00000000666103f8
kglpnal count 01 -- handle address: 00000000643f44b0, mode: 3 kglnaobj address:0x643f4678: ""
kglGetS0 pin address : 00000000666104e8
kgllkal count 03 -- handle address: 00000000707e1048, mode: 2 kglnaobj address:0x707e1210: "bookSYSCDB$ROOT"
kglGetS0 lock address : 0000000066610820
kgllkal count 04 -- handle address: 000000006b97c9f8, mode: 2 kglnaobj address:0x6b97cbc0: "1073777561SYSCDB$ROOT"
kglGetS0 lock address : 0000000066610910
kgllkal count 05 -- handle address: 00000000643f3080, mode: 1 kglnaobj address:0x643f3248: "e985fc239b919877f25909e8f398a456Child:1BOOK01P"
kglGetS0 lock address : 0000000066610730
kglpnal count 02 -- handle address: 00000000643f3080, mode: 3 kglnaobj address:0x643f3248: "e985fc239b919877f25909e8f398a456Child:1BOOK01P"
kglGetS0 pin address : 0000000066610640
kgllkal count 06 -- handle address: 0000000066590ed0, mode: 1 kglnaobj address:0x66591098: "SCOTTBOOK01P"
kglGetS0 lock address : 0000000066610730
kgllkal count 07 -- handle address: 00000000707e1048, mode: 2 kglnaobj address:0x707e1210: "bookSYSCDB$ROOT"
kglGetS0 lock address : 00000000666104e8
kgllkal count 08 -- handle address: 000000006b97c9f8, mode: 2 kglnaobj address:0x6b97cbc0: "1073777561SYSCDB$ROOT"
kglGetS0 lock address : 0000000066610820
kglpnal count 03 -- handle address: 0000000069def070, mode: 2 kglnaobj address:0x69def238: "DATABASESYSBOOK01P"
kglGetS0 pin address : 00000000666104e8
kgllkal count 09 -- handle address: 0000000069c3dc30, mode: 1 kglnaobj address:0x69c3ddf8: " SELECT VALUE$ FROM SYS.PROPS$ WHERE NAME = 'OGG_TRIGGER_OPTIMIZATION'"
kglGetS0 lock address : 00000000666104e8
kgllkal count 10 -- handle address: 00000000643fcdd0, mode: 1 kglnaobj address:0x643fcf98: ""
kglGetS0 lock address : 0000000066610820
kgllkal count 11 -- handle address: 000000006ab05ef0, mode: 2 kglnaobj address:0x6ab060b8: "PROPS$SYSBOOK01P(\f\273j"
kglGetS0 lock address : 0000000066610910
kglpnal count 04 -- handle address: 000000006ab05ef0, mode: 2 kglnaobj address:0x6ab060b8: "PROPS$SYSBOOK01P(\f\273j"
kglGetS0 pin address : 0000000066610640
kglpnal count 05 -- handle address: 0000000069def070, mode: 2 kglnaobj address:0x69def238: "DATABASESYSBOOK01P"
kglGetS0 pin address : 0000000066610910
kgllkal count 12 -- handle address: 0000000064a28260, mode: 1 kglnaobj address:0x64a28428: "LOGMNRGGC_TRIGGERSYSBOOK01P"
kglGetS0 lock address : 0000000066610640
kglpnal count 06 -- handle address: 0000000064a28260, mode: 2 kglnaobj address:0x64a28428: "LOGMNRGGC_TRIGGERSYSBOOK01P"
kglGetS0 pin address : 0000000066610308
kgllkal count 13 -- handle address: 0000000064a05d70, mode: 1 kglnaobj address:0x64a05f38: "NO_VM_DDLWMSYSBOOK01P"
kglGetS0 lock address : 0000000066610640
kglpnal count 07 -- handle address: 0000000064a05d70, mode: 2 kglnaobj address:0x64a05f38: "NO_VM_DDLWMSYSBOOK01P"
kglGetS0 pin address : 0000000066610308
kgllkal count 14 -- handle address: 0000000064a03320, mode: 1 kglnaobj address:0x64a034e8: "LBAC$BEFORE_ALTERLBACSYSBOOK01P"
kglGetS0 lock address : 0000000066610640
kglpnal count 08 -- handle address: 0000000064a03320, mode: 2 kglnaobj address:0x64a034e8: "LBAC$BEFORE_ALTERLBACSYSBOOK01P"
kglGetS0 pin address : 0000000066610308
kgllkal count 15 -- handle address: 00000000643f9470, mode: 1 kglnaobj address:0x643f9638: "select count(*)", ' ' <repeats 38 times>, "from user$ u", ' ' <repeats 41 times>, "where bitand(u.spare1, 256) = 256", ' ' <repeats 22 times>, "and u.type#", ' ' <repeats 15 times>, "= 1 "...
kglGetS0 lock address : 0000000066610910
kgllkal count 16 -- handle address: 00000000643f7d10, mode: 1 kglnaobj address:0x643f7ed8: ""
kglGetS0 lock address : 0000000066610640
kgllkal count 17 -- handle address: 000000006b83c168, mode: 2 kglnaobj address:0x6b83c330: "USER$SYSBOOK01P"
kglGetS0 lock address : 0000000066610308
kglpnal count 09 -- handle address: 000000006b83c168, mode: 2 kglnaobj address:0x6b83c330: "USER$SYSBOOK01P"
kglGetS0 pin address : 0000000066610218
kgllkal count 18 -- handle address: 0000000066532600, mode: 1 kglnaobj address:0x665327c8: "LCPSCOTTBOOK01P"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kglGetS0 lock address : 0000000066610910
kgllkal count 19 -- handle address: 0000000066532600, mode: 3 kglnaobj address:0x665327c8: "LCPSCOTTBOOK01P"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kglGetS0 lock address : 0000000066610910
Program received signal SIGUSR2, User defined signal 2.
0x00007f873a656fca in semtimedop () at ../sysdeps/unix/syscall-template.S:81
/usr/src/debug/glibc-2.17-c758a686/sysdeps/unix/syscall-template.S:81:3374:beg:0x7f873a656fca
--//显示出现library cache lock。
--//kill session 2:
--//session 4:
SYS@book> alter system kill session '404,9633' immediate;
System altered.
--//session 2:
SCOTT@book01p(404,9633)> alter procedure lcp compile;
alter procedure lcp compile
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 4339
Session ID: 404 Serial number: 9633
--//window 1:
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x0000000015330bbe in slrac_can_access ()
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x0000000015330bbe in slrac_can_access ()
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x0000000015330bbe in slrac_can_access ()
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x0000000015330bbe in slrac_can_access ()
(gdb) c
Continuing.
kgllkal count 20 -- handle address: 00000000707e1048, mode: 2 kglnaobj address:0x707e1210: "bookSYSCDB$ROOT"
kglGetS0 lock address : 0000000066610308
kgllkal count 21 -- handle address: 000000006b97c9f8, mode: 2 kglnaobj address:0x6b97cbc0: "1073777561SYSCDB$ROOT"
kglGetS0 lock address : 0000000066610218
kgllkal count 22 -- handle address: 0000000066590ed0, mode: 1 kglnaobj address:0x66591098: "SCOTTBOOK01P"
kglGetS0 lock address : 000000006660b9d0
kglpnal count 10 -- handle address: 0000000066532600, mode: 3 kglnaobj address:0x665327c8: "LCPSCOTTBOOK01P"
kglGetS0 pin address : 0000000066610640
--//kill session 2后,因为session 1还在运行,出现library cache pin。
Program received signal SIGUSR2, User defined signal 2.
0x00007f873a656fca in semtimedop () at ../sysdeps/unix/syscall-template.S:81
/usr/src/debug/glibc-2.17-c758a686/sysdeps/unix/syscall-template.S:81:3374:beg:0x7f873a656fca
--//session 4:
SYS@book> alter system kill session '149,63787' immediate;
System altered.
--//session 1:
SCOTT@book01p(149,63787)> exec lcp
BEGIN lcp; END;
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 4332
Session ID: 149 Serial number: 63787
--//window 1:
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x0000000015330bbe in slrac_can_access ()
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x0000000015330bbe in slrac_can_access ()
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x0000000015330bbe in slrac_can_access ()
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x0000000015330bbe in slrac_can_access ()
(gdb) c
Continuing.
kgllkal count 23 -- handle address: 00000000707e1048, mode: 2 kglnaobj address:0x707e1210: "bookSYSCDB$ROOT"
kglGetS0 lock address : 0000000066610308
kgllkal count 24 -- handle address: 000000006b97c9f8, mode: 2 kglnaobj address:0x6b97cbc0: "1073777561SYSCDB$ROOT"
kglGetS0 lock address : 0000000066610218
kgllkal count 25 -- handle address: 0000000061f0fe90, mode: 1 kglnaobj address:0x61f10058: "select source from source$ where obj#=:1 order by line"
kglGetS0 lock address : 000000006660bac0
kglpnal count 11 -- handle address: 0000000061f0fe90, mode: 2 kglnaobj address:0x61f10058: "select source from source$ where obj#=:1 order by line"
... --//输出太多,snapid。
kgllkal count 888 -- handle address: 000000006b845468, mode: 2 kglnaobj address:0x6b845630: "OBJ$SYSBOOK01P"
kglGetS0 lock address : 00000000666487b0
kglpnal count 294 -- handle address: 000000006b845468, mode: 2 kglnaobj address:0x6b845630: "OBJ$SYSBOOK01P"
kglGetS0 pin address : 0000000066612930
--//执行完成
SYS@book> @ ashtop event,p1hex,p2hex,p3hex sid=146 sysdate-15/1440 sysdate
Total Distinct Distinct Distinct
Seconds AAS %This EVENT P1HEX P2HEX P3HEX FIRST_SEEN LAST_SEEN Execs Seen Tstamps Execs Seen1
--------- ------- ------- ------------------------------------------ ----------------- ----------------- ----------------- ------------------- ------------------- ---------- -------- -----------
181 .2 54% | library cache lock 0000000066532600 0000000066610910 00012A0300010003 2024-09-21 10:54:14 2024-09-21 10:57:14 1 181 1
148 .2 44% | library cache pin 0000000066532600 0000000066610640 00012A0300010003 2024-09-21 10:57:15 2024-09-21 10:59:43 1 148 1
3 .0 1% | 2024-09-21 10:51:23 2024-09-21 10:59:45 2 3 3
1 .0 0% | db file sequential read 0000000000000001 0000000000008584 0000000000000001 2024-09-21 10:49:10 2024-09-21 10:49:10 1 1 1
1 .0 0% | db file sequential read 0000000000000001 00000000000085FC 0000000000000001 2024-09-21 10:49:08 2024-09-21 10:49:08 1 1 1
1 .0 0% | db file sequential read 0000000000000001 0000000000008A87 0000000000000001 2024-09-21 10:49:09 2024-09-21 10:49:09 1 1 1
1 .0 0% | db file sequential read 0000000000000001 0000000000018EF1 0000000000000001 2024-09-21 10:49:07 2024-09-21 10:49:07 1 1 1
1 .0 0% | db file sequential read 0000000000000003 00000000000015DB 0000000000000001 2024-09-21 10:49:11 2024-09-21 10:49:11 1 1 1
8 rows selected.
--//session 3先出现library cache lock,然后出现library cache pin等待事件,注意看FIRST_SEEN,LAST_SEEN列。
SYS@book> @ ashtop event,p1hex,p2hex,p3hex sid=404 sysdate-15/1440 sysdate
Total Distinct Distinct Distinct
Seconds AAS %This EVENT P1HEX P2HEX P3HEX FIRST_SEEN LAST_SEEN Execs Seen Tstamps Execs Seen1
--------- ------- ------- ------------------------------------------ ----------------- ----------------- ----------------- ------------------- ------------------- ---------- -------- -----------
109 .1 100% | library cache pin 0000000066532600 0000000066680B88 00012A0300010003 2024-09-21 10:54:08 2024-09-21 10:55:56 1 109 1
--//session 2出现library cache pin等待事件.
--//这里显示比较怪异,单独看看:
kgllkal count 15 -- handle address: 00000000643f9470, mode: 1 kglnaobj address:0x643f9638: "select count(*)", ' ' <repeats 38 times>, "from user$ u", ' ' <repeats 41 times>, "where bitand(u.spare1, 256) = 256", ' ' <repeats 22 times>, "and u.type#", ' ' <repeats 15 times>, "= 1 "...
kglGetS0 lock address : 0000000066610910
SYS@book> @ sharepool/shp4 00000000643f9470 0
HANDLE_TYPE KGLHDADR KGLHDPAR C40 KGLHDLMD KGLHDPMD KGLHDIVC KGLOBHD0 KGLOBHD6 KGLOBHS0 KGLOBHS6 KGLOBT16 N0_6_16 N20 KGLNAHSH KGLOBT03 KGLOBT09
---------------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
child handle address 00000000643F7D10 00000000643F9470 select count(*) 0 0 0 00000000643F7B50 00000000643F8A80 8128 16176 3509 27813 27813 1788700000 3pzwf21p9utb0 0
parent handle address 00000000643F9470 00000000643F9470 select count(*) 0 0 0 00000000643F92B0 00 4064 0 0 4064 4064 1788700000 3pzwf21p9utb0 65535
SYS@book> @ sql_id 3pzwf21p9utb0
--SQL_ID = 3pzwf21p9utb0
select count(*) from user$ u where bitand(u.spare1, 256) = 256 and u.type# = 1 and u.name = :1;
--//' ' <repeats 38 times>,表示重复38个空格的意思。
--//只要设置set print repeats 0就不会出现这样的情况。
kgllkal count 16 -- handle address: 00000000643f9470, mode: 1 kglnaobj address:0x643f9638: "select count(*) from user$ u where bitand(u.spare1, 256) = 256 and u.type# = 1 and u.name = :1"
kglGetS0 return lock address : 0000000065ae53b0
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040917/viewspace-3039944/ ,如需转载,请注明出处,否则将追究法律责任。