ITPub博客

首页 > 数据库 > Oracle > [20250901]x$kglob的kglhdbid字段.txt

[20250901]x$kglob的kglhdbid字段.txt

原创 Oracle 作者:lfree 时间:2025-09-09 20:52:41 2 删除 编辑

[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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969129