[20240828]分析为什么出现library cache lock等待事件5.txt --//前几天测试遇到的问题,假如表不存在的情况下,如果密集执行这类sql语句,不理解为什么出现library cache lock等待事件. --//验证如果有1个会话,是否会持有mode=3的情况出现. --//上午使用gdb设置断点来验证,这次直接密集执行看看. 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. 2.首先定位该对象handle address: --//换一个方式验证: $ sql_idz.sh 'select count(1) from deptxxx' 0 sql_text = select count(1) from deptxxx\0 full_hash_value(16) = AA0B8A5E997323CE2D65F9B7AF91ED4F or aa0b8a5e997323ce2d65f9b7af91ed4f hash_value(10) = 2945576271 sql_id(32) = 2utgtqyrt3vag sql_id(32) = 2utgtqyrt3vag sql_id(32) = 2utgtqyrt3vag SYS@book> @nmsp '' x52 @ nmsp table -1 @ nmsp '' 74 or @ @ nmsp '' 0x4a|x4a KGLSTDSC KGLSTIDN KGLSTIDN_HEX -------------- -------- ------------ SQL AREA BUILD 82 52 --//阻塞的对象在aa0b8a5e997323ce2d65f9b7af91ed4f.$BUILD$.BOOK01P\x52\0\0\0 $ sql_idz.sh 'aa0b8a5e997323ce2d65f9b7af91ed4f.$BUILD$.BOOK01P\x52\0\0\0' 3 sql_text = aa0b8a5e997323ce2d65f9b7af91ed4f.$BUILD$.BOOK01P\x52\0\0\0 full_hash_value(16) = 21DBAB24066F9561659DE3D1D5F8B304 or 21dbab24066f9561659de3d1d5f8b304 xxxxx_matching_signature(10) = 7322259059551810308 or 25769003133261361924 hash_value(10) = 3589845764 sql_id(32) = 6b7g3u7azjcs4 sql_id(32) = 6b7g3u7azjcs4 sql_id(32) = 6b7g3u7azjcs4 --//hash_value(10) = 3589845764 SCOTT@book01p> select count(1) from deptxxx; select count(1) from deptxxx * ERROR at line 1: ORA-00942: table or view does not exist --//执行多次。 SYS@book> @ kglob 0 3589845764 ============================== INST_ID : 1 OWNER : $BUILD$ NAME : aa0b8a5e997323ce2d65f9b7af91ed4f DB_LINK : NAMESPACE : SQL AREA BUILD TYPE : CURSOR NAMESPACE_NUM : 82 NAMESPACE_HEX : 52 SHARABLE_MEM : 0 LOADS : 0 EXECUTIONS : 0 LOCKS : 0 PINS : 0 KEPT : NO CHILD_LATCH : 45828 INVALIDATIONS : 0 HASH_VALUE : 3589845764 LOCK_MODE : NONE PIN_MODE : NONE STATUS : UNKOWN TIMESTAMP : PREVIOUS_TIMESTAMP : LOCKED_TOTAL : 5 PINNED_TOTAL : 0 PROPERTY : FULL_HASH_VALUE : 21dbab24066f9561659de3d1d5f8b304 CON_ID : 3 CON_NAME : BOOK01P ADDR : 0000000062E09BD0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EDITION : SQL_ID : OBJECT_STR : aa0b8a5e997323ce2d65f9b7af91ed4f.$BUILD$.BOOK01P\x52\0\0\0 PL/SQL procedure successfully completed. --//其handle address=0000000062E09BD0 --//建立bbb.txt包含50000个/ --//$ rm bbb.txt $ seq 50000 | xargs -IQ echo / >> bbb.txt $ uniq -c bbb.txt 50000 / 3.开始测试: --//session 1: SCOTT@book01p> select count(1) from deptxxx; select count(1) from deptxxx * ERROR at line 1: ORA-00942: table or view does not exist --//session 2: SYS@book> spool /tmp/lk1.txt SYS@book> column KGLNAOBJ format a32 SYS@book> select KGLLKSNM sid ,KGLLKMOD,KGLLKREQ,KGLNAOBJ,KGLLKHDL from x$kgllk where KGLLKHDL=hextoraw(upper('0000000062E09BD0')); no rows selected --//两边同时调用bbb.txt执行,等待执行完成.我的测试在执行session 2执行,然后快速切换到session 1执行. $ egrep "0000000062E09BD0$|---| KGLLKHDL$" /tmp/lk1.txt | sort |uniq -c 959 ---------- ---------- ---------- -------------------------------- ---------------- 1 268 0 0 aa0b8a5e997323ce2d65f9b7af91ed4f 0000000062E09BD0 9 268 2 0 aa0b8a5e997323ce2d65f9b7af91ed4f 0000000062E09BD0 949 268 3 0 aa0b8a5e997323ce2d65f9b7af91ed4f 0000000062E09BD0 959 SID KGLLKMOD KGLLKREQ KGLNAOBJ KGLLKHDL --//可以看出出现9次KGLLKMOD=3的情况,奇怪这样抓不到KGLLKMOD=0,KGLLKREQ=3的情况.也许这样的状态阻塞查询. 4.最后一个问题为什么这么多对象,最容易阻塞的在这里呢? $ cat lcl.gdb 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 ( $rdx==0x0000000062E09BD0) break kgllkal commands silent printf "kgllkal count %02d -- handle address: %016x, mode: %d ", ++$lk ,$rdx ,$rcx echo kglnaobj address: x/s $rdx+0x1c8 c #finish end #break kglpnal if $rcx==3 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 kglLock commands silent #printf "kglLock count %02d -- handle address: %016x, mode: %d \n", ++$lock ,$rdx ,$rcx printf "kglLock count %02d -- mode: %d \n", ++$lock ,$rcx c finish end Breakpoint 1 at 0x15367e90 Breakpoint 2 at 0x1536c020 Breakpoint 3 at 0x15363530 (gdb) c Continuing. kglLock count 01 ---------------------- kgllkal count 01 -- handle address: 0000000062e0b100, mode: 1 kglnaobj address:0x62e0b2c8: "select count(1) from deptxxx" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kglLock count 02 ---------------------- kgllkal count 02 -- handle address: 0000000062e09bd0, mode: 2 kglnaobj address:0x62e09d98: "aa0b8a5e997323ce2d65f9b7af91ed4f$BUILD$BOOK01P" kgllkal count 03 -- handle address: 0000000062e099a0, mode: 1 kglnaobj address:0x62e09b68: "" kglpnal count 01 -- handle address: 0000000062e099a0, mode: 3 kglnaobj address:0x62e09b68: "" kglLock count 03 ---------------------- ++++++++++++++++++++++++++++++++++++++ kgllkal count 04 -- handle address: 00000000702c73a0, mode: 2 kglnaobj address:0x702c7568: "bookSYSCDB$ROOT" kglLock count 04 ---------------------- kgllkal count 05 -- handle address: 000000006b57c9f8, mode: 2 kglnaobj address:0x6b57cbc0: "1073777561SYSCDB$ROOT" kglLock count 05 ---------------------- kgllkal count 06 -- handle address: 0000000062e08570, mode: 1 kglnaobj address:0x62e08738: "aa0b8a5e997323ce2d65f9b7af91ed4fChild:0BOOK01P" kglpnal count 02 -- handle address: 0000000062e08570, mode: 3 kglnaobj address:0x62e08738: "aa0b8a5e997323ce2d65f9b7af91ed4fChild:0BOOK01P" kglLock count 06 ---------------------- kgllkal count 07 -- handle address: 000000006e1370d8, mode: 1 kglnaobj address:0x6e1372a0: "SCOTTBOOK01P" kglLock count 07 ---------------------- kglLock count 08 ---------------------- kgllkal count 08 -- handle address: 00000000702c73a0, mode: 2 kglnaobj address:0x702c7568: "bookSYSCDB$ROOT" kglLock count 09 ---------------------- kgllkal count 09 -- handle address: 000000006b57c9f8, mode: 2 kglnaobj address:0x6b57cbc0: "1073777561SYSCDB$ROOT" kglLock count 10 ---------------------- kgllkal count 10 -- handle address: 0000000062e07040, mode: 2 kglnaobj address:0x62e07208: "DEPTXXXSCOTTBOOK01P" kglpnal count 03 -- handle address: 0000000062e07040, mode: 2 kglnaobj address:0x62e07208: "DEPTXXXSCOTTBOOK01P" kglLock count 11 ---------------------- kgllkal count 11 -- handle address: 0000000062e055e0, mode: 2 kglnaobj address:0x62e057a8: "DEPTXXXPUBLICBOOK01P" kglpnal count 04 -- handle address: 0000000062e055e0, mode: 2 kglnaobj address:0x62e057a8: "DEPTXXXPUBLICBOOK01P" --//为什么没有出现在下划线位置呢? SYS@book> select KGLLKSNM sid ,KGLLKMOD,KGLLKREQ,KGLNAOBJ,KGLLKHDL from x$kgllk where KGLLKHDL=hextoraw(upper('0000000062e0b100')); SID KGLLKMOD KGLLKREQ KGLNAOBJ KGLLKHDL ---------- ---------- ---------- -------------------------------- ---------------- 268 1 0 select count(1) from deptxxx 0000000062E0B100 --//在语句的父游标句柄上KGLLKMOD=1.重新前面的测试. $ egrep "0000000062E0B100$|---| KGLLKHDL$" /tmp/lk2.txt | sort |uniq -c 1 ---------- ---------- ---------- -------------------------------- ---------- 6247 ---------- ---------- ---------- -------------------------------- ---------------- 1 268 0 0 select count(1) from deptxxx 0000000062E0B100 6246 268 1 0 select count(1) from deptxxx 0000000062E0B100 6248 SID KGLLKMOD KGLLKREQ KGLNAOBJ KGLLKHDL --//KGLLKMOD=1,NULL模式,表示易碎解析锁,表示是否有效,失效的状态.根本不存在阻塞. --//在+++++++位置出现阻塞,就很容易理解,不知道是否与前面的kglpnal mode=3,不过对象不同. kglpnal count 01 -- handle address: 0000000062e099a0, mode: 3 kglnaobj address:0x62e09b68: "" --//子游标句柄有关。 --//现在想想oracle从12c开始在alter日志中记录执行超过100次以上的有问题的sql语句,有其道理的。 $ grep deptxxx alert_book.log |uniq -c 7006 BOOK01P(3):select count(1) from deptxxx
[20240828]分析为什么出现library cache lock等待事件5.txt
来源:这里教程网
时间:2026-03-03 20:35:28
作者:
编辑推荐:
- [20240828]分析为什么出现library cache lock等待事件5.txt03-03
- [20240917]tnsping诊断问题的局限性3.txt03-03
- [20240917]tpt pr.sql脚本小问题.txt03-03
- [20240829]关于依赖链.txt03-03
- 数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)03-03
- [20240829]关于依赖链3.txt03-03
- [20240830]V$ACTIVE_SESSION_HISTORY.TOP_LEVEL_SQL_ID.TXT03-03
- [20240901]21c Force matching signature的计算.txt03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)
- 拼多多上线“多多丰收馆”庆丰收,投入10亿补贴扶持新质农货商家
拼多多上线“多多丰收馆”庆丰收,投入10亿补贴扶持新质农货商家
26-03-03 - Oracle对象:序列(sequence)介绍
Oracle对象:序列(sequence)介绍
26-03-03 - 数据库性能再度提升20%.....
数据库性能再度提升20%.....
26-03-03 - IP打开“向下”空间,爱奇艺“摊牌了”
IP打开“向下”空间,爱奇艺“摊牌了”
26-03-03 - Oracle数据库,update阻塞select问题分析
Oracle数据库,update阻塞select问题分析
26-03-03 - 数据库管理-第235期 为什么RAC架构仍然很强(20240827)
数据库管理-第235期 为什么RAC架构仍然很强(20240827)
26-03-03 - rac集群二几点重启ora.gipcd不能正常启动
rac集群二几点重启ora.gipcd不能正常启动
26-03-03 - ORA-00600: 内部错误代码, 参数: [13011]处理
ORA-00600: 内部错误代码, 参数: [13011]处理
26-03-03 - 超过100万行 存储过程的超复杂Oracle数据库,国产化怎么办?
超过100万行 存储过程的超复杂Oracle数据库,国产化怎么办?
26-03-03
