[20250901]x$kglob的kglhdbid字段.txt
--//x$kglob的kglhdbid字段对应的bucket number。简单验证看看:
$ ./lookup.awk kglhd
kglhd : kernel generic library cache management object handle
--//最后的bid 表示 bucket id.
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.测试:
SCOTT@book01p> select * from dept where deptno=20;
DEPTNO DNAME LOC
---------- ------------------------------ -------------
20 RESEARCH DALLAS
SCOTT@book01p> @ hashz
HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET HASH_HEX SQL_EXEC_START SQL_EXEC_ID
---------- ------------- ------------ ---------- ---------- ------------------- -----------
95129850 80baj2c2ur47u 0 102650 5ab90fa 2025-09-01 16:46:20 16777216
3.验证:
SYS@book> @ sharepool/shp4 80baj2c2ur47u -1
HANDLE_TYPE KGLHDADR KGLHDPAR C40 KGLHDLMD KGLHDPMD KGLHDIVC KGLOBHD0 KGLOBHD6 KGLOBHS0 KGLOBHS6 KGLOBT16 N0_6_16 N20 KGLNAHSH KGLOBT03 KGLOBT09
---------------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
child handle address 0000000065DC79E0 0000000065DC9140 select * from dept where deptno=20 0 0 0 0000000065DC7820 0000000065DC8768 8080 20224 3299 31603 31603 95129850 80baj2c2ur47u 0
parent handle address 0000000065DC9140 0000000065DC9140 select * from dept where deptno=20 0 0 0 0000000065DC8F80 00 4064 0 0 4064 4064 95129850 80baj2c2ur47u 65535
--//我写的脚本查询不包括kglhdbid字段。
SYS@book> @ descv x$kglob kglhdbid
Name Null? Type
------------------------------- -------- ----------------------------
168 KGLHDBID NUMBER
SYS@book> select kglhdbid,KGLHDADR,KGLHDPAR,kglnaobj c40,KGLNAHSH, KGLOBT03, KGLOBT09 from x$kglob where KGLOBT03='80baj2c2ur47u';
KGLHDBID KGLHDADR KGLHDPAR C40 KGLNAHSH KGLOBT03 KGLOBT09
---------- ---------------- ---------------- ---------------------------------------- ---------- ------------- ----------
102650 0000000065DC79E0 0000000065DC9140 select * from dept where deptno=20 95129850 80baj2c2ur47u 0
102650 0000000065DC9140 0000000065DC9140 select * from dept where deptno=20 95129850 80baj2c2ur47u 65535
--//与前面hashz脚本的查询结果完全一致(KGL_BUCKET=102650)。
--//手工测试表dept看看:
SYS@book> select kglhdbid,KGLHDADR,KGLHDPAR,kglnaobj c40,KGLNAHSH, KGLOBT03, KGLOBT09 from x$kglob where kglnaobj='DEPT';
KGLHDBID KGLHDADR KGLHDPAR C40 KGLNAHSH KGLOBT03 KGLOBT09
---------- ---------------- ---------------- ---------------------------------------- ---------- ------------- ----------
98828 0000000065DC5080 0000000065DC5080 DEPT 249266700 0
--//表对象dept的KGLHDBID=98828,验证看看。
$ sql_idz.sh "DEPT.SCOTT.BOOK01P\01\0\0\0" 3
sql_text = DEPT.SCOTT.BOOK01P\01\0\0\0
full_hash_value(16) = 05DB243908B3C797B99628590EDB820C or 05db243908b3c797b99628590edb820c
xxxxx_matching_signature(10) = -5073823567219817972 or 13372920506489733644
hash_value(10) = 249266700 or hash_value(16) = 0EDB820C or 0edb820c
sql_id(16) = B99628590EDB820C or b99628590edb820c
sql_id(32) = bm5j8b47dr0hc
sql_id(32) = bm5j8b47dr0hc
sql_id(32) = bm5j8b47dr0hc
--//hash_value(10)=249266700,与KGLNAHSH=249266700一致。
--//249266700 % 2^17 = 98828,也与KGLHDBID=98828对上。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3095298/ ,如需转载,请注明出处,否则将追究法律责任。