首页 > 其他分享 >[20240829]关于依赖链3.txt

[20240829]关于依赖链3.txt

时间:2024-09-01 17:26:08浏览次数:10  
标签:---------------- 依赖 00000000 -- 20240829 sql ---------- txt book

[20240829]关于依赖链3.txt

--//如果修改表结构或者改名,相关的sql语句在共享池会失效,必须重新分析,我开始学习orcle时候,一直认为这些相关信息保存在表对象
--//句柄的堆0里面,如果涉及到的sql语句很多,这样堆0应该很大,而实际上的情况上堆0一直没有变化.我曾经问过别人这个问题,最终无
--//法知道答案,或者解答不能让人满意.

--//如果不在表对象句柄的堆0里面,这样应该分散在相关sql语句的对象句柄的堆0里面(我估计是父游标堆0),如果修改表结构或者改名,
--//相关sql语句会失效,oracle内部如何操作实现,我一直感觉这个很复杂,也没有人给我讲解.简单探究看看.

--//更正在sql语句的子游标堆0里面类型recr的chunk中.

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.

$ cat mn.txt
DECLARE
    l_count PLS_INTEGER;
BEGIN
    FOR i IN 1..&&1
    LOOP
       EXECUTE IMMEDIATE 'SELECT count(*)  FROM dept ,emp WHERE dept.deptno = emp.deptno' into l_count;
    END LOOP;
END;
/
--//为了测试加入2个表.dept,emp在scott用户下.

--//确定sql语句sql_id.
$ sql_idz.sh 'SELECT count(*)  FROM dept ,emp WHERE dept.deptno = emp.deptno' 0
sql_text = SELECT count(*)  FROM dept ,emp WHERE dept.deptno = emp.deptno\0
full_hash_value(16) = 1A481C72A05FBA55B3FEBD346669B6BE or 1a481c72a05fba55b3febd346669b6be
hash_value(10) = 1718204094
sql_id(32) = b7zpx6jm6mdpy
sql_id(32) = b7zpx6jm6mdpy
sql_id(32) = b7zpx6jm6mdpy
--//确定sql_id=b7zpx6jm6mdpy,hash_value(10) = 1718204094

2.测试:
--//session 1:
SCOTT@book01p> @ mn.txt 1e8
--//如果你很快执行完成,增加循环次数.

--//session 2:
SYS@book> select * from gv$object_dependency where FROM_HASH=1718204094;
   INST_ID FROM_ADDRESS      FROM_HASH TO_OWNER   TO_NAME              TO_ADDRESS          TO_HASH    TO_TYPE     CON_ID
---------- ---------------- ---------- ---------- -------------------- ---------------- ---------- ---------- ----------
         1 0000000064130C90 1718204094 SCOTT      DEPT                 0000000064126F80  249266700          2          3
         1 0000000064130C90 1718204094 SCOTT      EMP                  000000006412CBD0 1273316885          2          3
         1 0000000064130C90 1718204094            SCOTT                0000000066579048  925293031        255          3

SYS@book> @ v2 gv$object_dependency
Show SQL text of views matching "gv$object_dependency"...
no rows selected
VIEW_NAME                      TEXT
------------------------------ ----------------------------------------------------------------------------------------------------
GV$OBJECT_DEPENDENCY           select d.inst_id,d.kglhdpar, d.kglnahsh,         o.kglnaown, o.kglnaobj, o.kglhdadr, o.kglnahsh,
                               o.kglobtyp, d.con_id from x$kglob o, x$kgldp d  where o.kglnahsh = d.kglrfhsh  and  o.kglhdadr =
                               d.kglrfhdl
--//关联x$kglob视图,直接查询x$kglob.
SYS@book> column KGLDPFGR format a20
SYS@book> select * from x$kgldp where kglnahsh=1718204094 order by KGLDEPNO;
ADDR             INDX INST_ID CON_ID KGLHDADR         KGLHDPAR           KGLNAHSH KGLDEPNO KGLRFHDL           KGLRFHSH KGLRFFLG KGLDPOBJ         KGLDPPOS KGLDPFGR
---------------- ---- ------- ------ ---------------- ---------------- ---------- -------- ---------------- ---------- -------- ---------------- -------- --------
00007FC158642710    2       1      3 000000006412F530 0000000064130C90 1718204094        0 0000000066579048  925293031        1 000000006412E3F0        0         --//SCOTT
00007FC1586426A8    1       1      3 000000006412F530 0000000064130C90 1718204094        1 000000006412CBD0 1273316885        1 000000006412E3F0       28         --//EMP
00007FC158642640    0       1      3 000000006412F530 0000000064130C90 1718204094        2 0000000064126F80  249266700        1 000000006412E3F0       22         --//DEPT

--//根据上面的视图定义,很容易验证相关地址.
--//0000000064130C90 sql语句的父游标地址,  hash_value=1718204094
--//000000006412F530 sql语句的子游标地址,  hash_value=1718204094
--//0000000064126F80 DEPT的handle address, hash_value=249266700
--//000000006412CBD0 EMP的handle address,  hash_value=1273316885
--//0000000066579048 SCOTT的handle address,hash_value=925293031

--//0123456789012345678902234567890323456789042345678905234567890612
--//SELECT count(*)  FROM dept ,emp WHERE dept.deptno = emp.deptno
--///KGLDPPOS = 0 28 22 可以猜测对象在sql语句的偏移量,这个很容易验证。当然KGLDPPOS=0,估计是一个例外。

--//可以简单验证:
SYS@book> @ sharepool/shp4x b7zpx6jm6mdpy 0
HANDLE_TYPE            KGLHDADR         KGLHDPAR         C40                                        KGLHDLMD   KGLHDPMD   KGLHDIVC KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
---------------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
child handle address   000000006412F530 0000000064130C90 SELECT count(*)  FROM dept ,emp WHERE de          1          2          0 000000006412F370 00000000641302B8       8080      16176       3327     27583      27583 1718204094 b7zpx6jm6mdpy          0
parent handle address  0000000064130C90 0000000064130C90 SELECT count(*)  FROM dept ,emp WHERE de          1          0          0 0000000064130AD0 00                     4064          0          0      4064       4064 1718204094 b7zpx6jm6mdpy      65535
--//parent handle address=0000000064130C90,child handle address=000000006412F530.

SYS@book> @ kglob 0 925293031
==============================
INST_ID                       : 1
OWNER                         :
NAME                          : SCOTT
DB_LINK                       :
NAMESPACE                     : SCHEMA
TYPE                          : NONE
NAMESPACE_NUM                 : 73
NAMESPACE_HEX                 : 49
SHARABLE_MEM                  : 0
LOADS                         : 0
EXECUTIONS                    : 0
LOCKS                         : 2
PINS                          : 0
KEPT                          : NO
CHILD_LATCH                   : 55783
INVALIDATIONS                 : 0
HASH_VALUE                    : 925293031
LOCK_MODE                     : SHARED
PIN_MODE                      : NONE
STATUS                        : UNKOWN
TIMESTAMP                     :
PREVIOUS_TIMESTAMP            :
LOCKED_TOTAL                  : 12
PINNED_TOTAL                  : 0
PROPERTY                      :
FULL_HASH_VALUE               : 46bd45166adbb098d6fef7ce3726d9e7
CON_ID                        : 3
CON_NAME                      : BOOK01P
ADDR                          : 0000000066579048
EDITION                       :
SQL_ID                        :
OBJECT_STR                    : SCOTT
PL/SQL procedure successfully completed.
--//schema=SCOTT ,HASH_VALUE : 925293031,ADDR: 0000000066579048 等于句柄地址完全对上.

--//再来看看KGLDPOBJ=000000006412E3F0.
SYS@book> @ fchaz 000000006412E3F0
LOC KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_END
--- ---------------- ---------- ---------- ---------------- ---------- -------- ---------- ---------------- -----------------
SGA 000000006412E300          1          1 KGLH0^6669b6be         4096 recr           4095 000000006412F370 000000006412F2FF
--//看看它位于什么位置,注意KSMCHCOM=KGLH0^6669b6be, 6669b6be = 1718204094 正好是sql语句的hash_value.
--//0x000000006412E3F0-0x000000006412E300  = 0xf0 =  240.

select x$ksmsp.*,TO_CHAR(TO_NUMBER(KSMCHPTR,'XXXXXXXXXXXXXXXX') + KSMCHSIZ - 1,'FM0XXXXXXXXXXXXXXX') KSMCHPTR_END from x$ksmsp where ksmchpar=hextoraw(lpad(upper('000000006412F370'),16, '0'));
ADDR                   INDX    INST_ID     CON_ID   KSMCHIDX   KSMCHDUR KSMCHCOM         KSMCHPTR           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_END
---------------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------------- ---------- -------- ---------- ---------------- -----------------
00007FC158486DD8     159196          1          1          1          1 KGLH0^6669b6be   000000006412E300       4096 recr           4095 000000006412F370 000000006412F2FF
                                                                                         ~~~~~~~~~~~~~~~~~
00007FC1584863B0     159221          1          1          1          1 KGLH0^6669b6be   0000000064123E90       4096 freeabl           0 000000006412F370 0000000064124E8F
--//上下对比可以依赖链的相关信息保存在child handle address的堆0的类型KSMCHCLS=recr.

SYS@book> @ t
TRACEFILE
-----------------------------------------------------------------
/u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3642.trc

SYS@book> oradebug setmypid
Statement processed.
SYS@book> oradebug peek 0x000000006412E300 4096 1
[06412E300, 06412F300) = 00001001 80B38F00 6412E0D0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000003 000A0FFF 6412F370 00000000 ...

$ egrep "66579048|6412CBD0|64126F80" /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3642.trc
06412ECC0 6412CDA8 00000000 66579048 00000000  [...d....H.Wf....]
                            !!!!!!!!
06412ED90 6412CC70 00000000 6412CBD0 00000000  [p..d.......d....]
                            @@@@@@@@
06412EE00 17ADC348 00000000 6412CBD0 00000000  [H..........d....]
06412EE10 6412CBD0 00000000 00000051 00B38F00  [...d....Q.......]
06412EE30 64127020 00000000 64126F80 00000000  [ p.d.....o.d....]
                            ########
06412EE70 17ADC348 00000000 64126F80 00000000  [H........o.d....]
06412EE80 64126F80 00000000 00000031 00B38F00  [.o.d....1.......]

--//xkgldp.KGLRFHDL的地址信息保存在child handle address的堆0的类型KSMCHCLS=recr.
--//0000000066579048 出现1次 scott
--//000000006412CBD0 出现3次 emp
--//0000000064126F80 出现3次 dept

SYS@book> oradebug peek 0x000000006412E3F0 64 1
[06412E3F0, 06412E430) = 6412F530 00000000 6412EAA8 00000000 00000000 00000000 6412F320 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ...
--//6412F530 00000000 颠倒 00000000 6412F530  指向 子游标句柄地址.

--//除了知道sql语句的子游标堆0保存依赖链信息外,还是搞不懂如果某个对象失效,oracle内部如何操作的.
--//问题还是集中在oracle如何通过x$kgldp组织起来这些相关信息的.
SYS@book> @xind x$kgldp
TABLE_NAME                     INDEX_NUMBER COLUMN_NAME                    COLUMN_POSITION     CON_ID
------------------------------ ------------ ------------------------------ --------------- ----------
X$KGLDP                                   1 KGLNAHSH                                     0          0

标签:----------------,依赖,00000000,--,20240829,sql,----------,txt,book
From: https://www.cnblogs.com/lfree/p/18391490

相关文章

  • [20240827]分析为什么出现library cache lock等待事件2.txt
    [20240827]分析为什么出现librarycachelock等待事件2.txt--//前几天一直在分析如果表不存在的情况下,密集执行为什么出现librarycachelock等待事件,而且出现的mode=2(共享模式),按照道--//理不应该阻塞,做一个分析.1.环境:SCOTT@book01p>@ver2==============================......
  • [20240828]分析为什么出现library cache lock等待事件5.txt
    [20240828]分析为什么出现librarycachelock等待事件5.txt--//前几天测试遇到的问题,假如表不存在的情况下,如果密集执行这类sql语句,不理解为什么出现librarycachelock等待事件.--//验证如果有1个会话,是否会持有mode=3的情况出现.--//上午使用gdb设置断点来验证,这次直接密集......
  • [20240829]关于依赖链.txt
    [20240829]关于依赖链.txt--//如果修改表结构或者改名,相关的sql语句在共享池会失效,必须重新分析,我开始学习orcle时候,一直认为这些相关信息保存在表对象--//句柄的堆0里面,如果涉及到的sql语句很多,这样堆0应该很大,而实际上的情况上堆0一直没有变化.我曾经问过别人这个问题,最......
  • [20240826]奇怪ORA-01031 insufficient privileges报错.txt
    [20240826]奇怪ORA-01031insufficientprivileges报错.txt--//遇到的奇怪ORA-01031insufficientprivileges情况,做一个分析:1.环境:SYS@book01p>@ver2==============================PORT_STRING                  :x86_64/Linux2.4.xxVERSION     ......
  • Blazor基础学习填坑系列-02-添加依赖包
    继续学习官方给出的demo,参照示例代码,添加包引用时卡住了,官方给出的包的版本6.0.X明显跟当前用的不一致 心想,就别在终端中敲指令了,干脆手动添加吧,结果找不到入口,摸索了下,终于找到:依赖项-包,右键-管理NuGet程序包 根据依赖包名搜索,安装,版本号会自动带出,代码会自动补全......
  • python读取txt文本文件-批量更改mysql数据库中一批用户的用户名的python脚本保存及转
    一、python读取txt文本文件-批量更改mysql数据库中一批用户的用户名的python脚本保存    做一个简单的事:使用python读取一个txt文件,里面存储着N行用户id,需要一行行读取后再读取另一个存储用户昵称的txt文件,判断昵称是否有重复,如果没有重复就将数据库中的当前uid用户的昵称......
  • 20240901_113224 python 环境依赖的备份与导入
    20240830_173845python当前环境依赖包导出到文件中_鲸鱼编程pyhui的技术博客_51CTO博客https://blog.51cto.com/u_13137233/1187710920240830_183845python从依赖包记录文件中批量安装包_鲸鱼编程pyhui的技术博客_51CTO博客https://blog.51cto.com/u_13137233/11877185......
  • Go实战全家桶之一:goconfig依赖注入扩展之自动注入配置项、工业级巨匠
    开源地址:goconfig:gitclonehttps://gitee.com/ichub/go.git基础结构packageichubconfigimport("gitee.com/ichub/goconfig/common/base/basedto""gitee.com/ichub/goconfig/common/base/baseutils/reflectutils""github.com/gogf/......
  • 了解依赖反转原则(DIP)、控制反转(IoC)、依赖注入(DI)及 IoC容器
    这篇文章将描述DIP、IoC、DI和IoC容器。大多数情况下,初学者开发人员会遇到DIP、IoC、DI和IoC容器的问题。他们混淆在一起,发现很难辨别他们之间的区别,不知道为什么他们需要使用他们。另一方面,很多人使用DI,IoC却不知道它能解决什么问题。关于这个话题有很多帖子......
  • .NET|--WPF|--笔记合集|--依赖项属性|--2.注册依赖项属性
    前言使用一个实例,其实分2步骤定义,实例化.但是依赖项属性为不能直接实例化,因为DependencyProperty类没有公开的构造函数,只能使用静态的DependencyProperty.Register方法创建DependencyProperty实例.DependencyProperty.Register源码//System.Windows.DependencyP......