我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何简单阅读library cache dump

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何简单阅读library cache dump

源起于对实例的systemdump分析,现把library cache dump的部分单拿出来,做个简单的猜想。

SYS@moe SQL>col KGLNAOBJ for a40
SYS@moe SQL>set line 123
SYS@moe SQL>select * from scott.dept;
 
    DEPTNODNAME          LOC
---------- -------------- -------------
       10 ACCOUNTING     NEW YORK
       20 RESEARCH       DALLAS
       30 SALES          CHICAGO
       40 OPERATIONS     BOSTON
 
SYS@moe SQL>selectkglhdadr,kglhdpar,kglnaobj,KGLOBHS0,kglobhd0,KGLOBHS6,KGLOBHD6 from x$kglobwhere kglnaobj like 'select * from scott.dept%';
 
KGLHDADR        KGLHDPAR        KGLNAOBJ                        KGLOBHS0 KGLOBHD0          KGLOBHS6 KGLOBHD6
---------------- ---------------------------------------------- ---------- ---------------- --------------------------
000000009BED2700 000000009BF74618 select *fromscott.dept            4488 000000009BED3100       8088 000000009E287B88
000000009BF74618 000000009BF74618 select *fromscott.dept            4720 000000009BECF350          000

KGLHDADR为librarycache handle的地址

KGLHDPAR为父地址

KGLNAOBJ为librarycache object

KGLOBHD0为heap0地址

KGLOBHD6为heap6地址

SYS@moe SQL>select KSMCHPTR,KSMCHCOM,KSMCHCLS,KSMCHSIZ from x$ksmsp where  KSMCHPAR='000000009BECF350'; 父游标hd0
 
KSMCHPTR        KSMCHCOM         KSMCHCLS  KSMCHSIZ
---------------- ---------------- ------------------
000000009E287400 KGLH0^3658de8a  recr           4096

KSMCHPTR为chunk地址

KSMCHPAR为x$kglob中查询出来的heap的地址

SYS@moe SQL>selectKSMCHPTR,KSMCHCOM,KSMCHCLS ,KSMCHSIZ from x$ksmsp where KSMCHPAR='000000009BED3100'; 子游标hd0
 
KSMCHPTR        KSMCHCOM         KSMCHCLS  KSMCHSIZ
---------------- ---------------- ------------------
000000009E286400 KGLH0^3658de8a  recr           4096
 
SYS@moe SQL>selectKSMCHPTR,KSMCHCOM,KSMCHCLS ,KSMCHSIZ from x$ksmsp where KSMCHPAR='000000009E287B88'; 子游标hd6
 
KSMCHPTR        KSMCHCOM         KSMCHCLS  KSMCHSIZ
---------------- ---------------- ------------------
000000009C1826D8SQLA^3658de8a   recr           4096
000000009C17E6D8SQLA^3658de8a   freeabl        4096
 
SYS@moe SQL>selectsql_id,hash_value,address,child_address,sql_text from v$sql where sql_text like'select * from scott.dept%';
 
SQL_ID       HASH_VALUE ADDRESS         CHILD_ADDRESS
------------- ---------- --------------------------------
SQL_TEXT
f6hhpzwv5jrna  911793802000000009BF74618 000000009BED2700
select * from scott.dept
 
 
SYS@moe SQL>alter session set events'immediate trace name library_cache level 16';
 
Session altered.

下面是trc部分:

Bucket: #=56970 Mutex=0xa3b59180(0, 23, 0,6)

  LibraryHandle: Address=0x9bf74618 Hash=3658de8a LockMode=0 PinMode=0 LoadLockMode=0Status=VALD

Address=0x9bf74618这个值是x$kglob.KGLHDPAR的值

Hash=3658de8a这个值是x$ksmsp.KSMCHCOM的值,转成10进制是911793802,是v$sql. HASH_VALUE的值

SYS@moe SQL>selectto_number('3658de8a','xxxxxxxxxxx') from dual;

 

TO_NUMBER('3658DE8A','XXXXXXXXXXX')

-----------------------------------

                         911793802

    ObjectName: Name=select * from scott.dept   这里是执行的语句,是x$kglob.KGLNAOBJ的值,也是v$sql. SQL_TEXT的值

     FullHashValue=66438da3ebbc48a3e34215ff3658de8a Namespace=SQL AREA(00)Type=CURSOR(00) Identifier=911793802 OwnerIdn=0

Identifier=911793802是v$sql.HASH_VALUE的值

    Statistics: InvalidationCount=0 ExecutionCount=1 LoadCount=2 ActiveLocks=0 TotalLockCount=1TotalPinCount=1

    Counters: BrokenCount=1 RevocablePointer=1 KeepDependency=1 Version=0 BucketInUse=0HandleInUse=0 HandleReferenceCount=0

    Concurrency: DependencyMutex=0x9bf746c8(0, 3, 0, 0) Mutex=0x9bf74758(492, 58, 0, 6)

   Flags=RON/PIN/TIM/PN0/DBN/[10012841]

    WaitersLists:

     Lock=0x9bf746a8[0x9bf746a8,0x9bf746a8]

     Pin=0x9bf74688[0x9bf74688,0x9bf74688]

     LoadLock=0x9bf74700[0x9bf74700,0x9bf74700]

    Timestamp: Current=08-04-2016 13:55:02

    HandleReference: Address=0x9bf747e0 Handle=(nil) Flags=[00]

    ReferenceList:

     Reference:  Address=0x9e2857c0 Handle=0x9bf4e818 Flags=ROD[21]

    LibraryObject: Address=0x9e2874b0 HeapMask=0000-0001-0001-0000 Flags=EXS[0000] Flags2=[0000]PublicFlags=[0000]

     DataBlocks:    这个datablocks指的是如下图中的红框

如何简单阅读library cache dump

       Block:  #='0' name=KGLH0^3658de8a pins=0Change=NONE     这里的name=KGLH0^3658de8a指的是heap0

         Heap=0x9becf350 Pointer=0x9e287550 Extent=0x9e287430 Flags=I/-/P/A/-/-

Heap=0x9becf350指的是父游标的hd0,对应x$kglob. KGLOBHD0

         FreedLocation=0 Alloc=2.460938 Size=3.976562 LoadTime=39359924950

     ChildTable:  size='16'

       Child:  id='0' Table=0x9e288360 Reference=0x9e287db8Handle=0x9bed2700

Handle=0x9bed2700这个指的是子游标handle对应x$kglob. KGLHDADR

      Children:

       Child:  childNum='0'

         LibraryHandle:  Address=0x9bed2700 Hash=0 LockMode=0 PinMode=0LoadLockMode=0 Status=VALD

Address=0x9bed2700这个指的是子游标handle地址,对应x$kglob. KGLHDADR

           Name:  Namespace=SQL AREA(00) Type=CURSOR(00)

           Statistics:  InvalidationCount=0 ExecutionCount=1 LoadCount=1ActiveLocks=0 TotalLockCount=1 TotalPinCount=2

           Counters:  BrokenCount=1 RevocablePointer=1 KeepDependency=0 Version=0BucketInUse=0 HandleInUse=0 HandleReferenceCount=0

           Concurrency:  DependencyMutex=0x9bed27b0(0, 0, 0, 0) Mutex=0x9bf74758(492,58, 0, 6)

           Flags=RON/PIN/PN0/EXP/CHD/[10012111]

           WaitersLists:

             Lock=0x9bed2790[0x9bed2790,0x9bed2790]

             Pin=0x9bed2770[0x9bed2770,0x9bed2770]

             LoadLock=0x9bed27e8[0x9bed27e8,0x9bed27e8]

           ReferenceList:

             Reference:  Address=0x9e287db8 Handle=0x9bf74618 Flags=CHL[02]

           LibraryObject:  Address=0x9e2864b0 HeapMask=0000-0001-0001-0000Flags=EXS[0000] Flags2=[0000] PublicFlags=[0000]

             Dependencies:  count='1' size='16' table='0x9e2872e8'

               Dependency: num='0'

                 Reference=0x9e286a70 Position=20 Flags=DEP[0001]

                 Handle=0x9bf4e5f8 Type=TABLE(02) Parent=SCOTT.DEPT这个是引用的表名

Handle=0x9bf4e5f8这个是引用的对象的handle地址,Parent=SCOTT.DEPT 这个是引用的表名

             ReadOnlyDependencies:  count='1' size='16'

               ReadDependency:  num='0' Table=0x9e287380 Reference=0x9e286968Handle=0x9bf4e818 Flags=DEP/ROD/KPP[61]

             Accesses:  count='1' size='16'

               Dependency:  num='0' Type=0009

             DataBlocks:

               Block:  #='0' name=KGLH0^3658de8a pins=0 Change=NONE

                 Heap=0x9bed3100 Pointer=0x9e286550 Extent=0x9e286430 Flags=I/-/-/A/-/-

Heap=0x9bed3100这个是子游标heap0的地址,对应x$kglob. KGLOBHD0

                 FreedLocation=0 Alloc=2.078125 Size=3.937500 LoadTime=39359924950

               Block:  #='6' name=SQLA^3658de8a pins=0 Change=NONE

                 Heap=0x9e287b88 Pointer=0x9c183348 Extent=0x9c182708 Flags=I/-/-/A/-/E

Heap=0x9e287b88这个是子游标heap6的地址,对应x$kglob. KGLOBHD6

                 FreedLocation=0 Alloc=6.492188 Size=7.898438 LoadTime=0

           NamespaceDump:

             Child Cursor:  Heap0=0x9e286550 Heap6=0x9c183348 Heap0 LoadTime=08-04-2016 13:55:02 Heap6 Load Time=08-04-2016 13:55:02

    NamespaceDump:

      ParentCursor:  sql_id=f6hhpzwv5jrna parent=0x9e287550 maxchild=1 plk=n ppn=n

sql_id=f6hhpzwv5jrna这个是父游标的sql_id,对应v$sql. SQL_ID

 

 

Bucket: #=68887Mutex=0xa3bcd788(0, 23, 0, 6)

 LibraryHandle:  Address=0x9bf4e5f8 Hash=804f0d17 LockMode=0 PinMode=0LoadLockMode=0 Status=VALD

Address=0x9bf4e5f8这个是引用的对象的handle地址,可以看到后面的lockmode与pinmode

   ObjectName:  Name=SCOTT.DEPT  这个是对象的名称

     FullHashValue=1383925607dd84fd07c34017804f0d17 Namespace=TABLE/PROCEDURE(01)Type=TABLE(02) Identifier=87106 OwnerIdn=83

Type=TABLE(02)对象是表,以02代表表 Identifier=87106这个是object_id  OwnerIdn=83这个是user_id

SYS@moe SQL>selectobject_id from dba_objects where owner='SCOTT' and object_name='DEPT';

 

OBJECT_ID

----------

    87106

SYS@moe SQL>selectuser_id from dba_users where username='SCOTT';

 

   USER_ID

----------

       83

   Statistics:  InvalidationCount=0 ExecutionCount=0 LoadCount=1ActiveLocks=0 TotalLockCount=1 TotalPinCount=1

   Counters:  BrokenCount=1 RevocablePointer=1 KeepDependency=0 Version=0BucketInUse=0 HandleInUse=0 HandleReferenceCount=0

   Concurrency:  DependencyMutex=0x9bf4e6a8(0, 1, 0, 0) Mutex=0x9bf4e738(492,47, 0, 6)

   Flags=PIN/TIM/[00002801]

   WaitersLists:

     Lock=0x9bf4e688[0x9bf4e688,0x9bf4e688]

     Pin=0x9bf4e668[0x9bf4e668,0x9bf4e668]

     LoadLock=0x9bf4e6e0[0x9bf4e6e0,0x9bf4e6e0]

   Timestamp:  Current=08-24-2013 12:04:21

   HandleReference:  Address=0x9bf4e7b0 Handle=0x9bf386a0 Flags=OWN[200]

   ReferenceList:

     Reference:  Address=0x9e286a70 Handle=0x9bed2700 Flags=DEP[01]

       Timestamp=08-24-2013 12:04:21 InvalidatedFrom=0

   LibraryObject:  Address=0x9e2844b0 HeapMask=0000-0701-0701-0000Flags=EXS/LOC[0004] Flags2=[0000] PublicFlags=[0000]

 

 

所以dump时,是把父游标与子游标dump在一起的,通过父游标去定位它下面的所有子游标,其中block:#=0是heap0,block:#=6是heap6

父游标的dump中Name指向sql文本,而子游标的Name指向SQL AREA(00) Type=CURSOR(00)

父游标与子游标都存在handle、heap0,但是只有子游标有heap6

Lock与pin除了在sql或是游标上,也发生面引用的对象上,在这里会把对象与user相关的东东体现一部分出来

其他的目前还没看出来是什么,这个有点难猜,而且这方面的资料也不太好找,当然有些可能是我猜错的,欢迎大家指出。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何简单阅读library cache dump

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java如何实现简单图书借阅系统

这篇文章主要介绍“Java如何实现简单图书借阅系统”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java如何实现简单图书借阅系统”文章能帮助大家解决问题。为图书阅览室开发一个图书借阅系统,最多可存5
2023-06-29

如何使用java实现简单的图书借阅系统

这篇文章将为大家详细讲解有关如何使用java实现简单的图书借阅系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下直接看代码:package ttt;import java.awt.Border
2023-06-29

如何使用MySQL和Java实现一个简单的订阅功能

如何使用MySQL和Java实现一个简单的订阅功能随着互联网的发展,订阅功能成为了许多网站和应用程序的常见特性。订阅功能允许用户获取他们感兴趣的内容的更新和通知。在本文中,我将向您介绍如何使用MySQL和Java来实现一个简单的订阅功能。为
2023-10-22

如何用Go语言开发一个简单的在线订阅系统

在当今数字化的时代,订阅系统已经成为各行各业的常见应用,它为企业和个人提供了一种便捷的方式来提供服务和获取信息。而随着技术的不断发展,我们可以利用不同的编程语言来开发各种订阅系统。本篇将介绍如何用Go语言来开发一个简单的在线订阅系统。1.
如何用Go语言开发一个简单的在线订阅系统
2023-11-20

R语言如何读取excel数据的简单方法

本篇内容主要讲解“R语言如何读取excel数据的简单方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“R语言如何读取excel数据的简单方法”吧!安装库安装xlsxinstall.package
2023-06-08

Matlab中如何读取图片并进行简单的操作

这篇文章主要介绍了Matlab中如何读取图片并进行简单的操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。01—Matlab的使用当我们打开软件的时候会看到如下的界面,图片中
2023-06-19

如何给您的微信订阅号开发一个最简单的问答服务

今天就跟大家聊聊有关如何给您的微信订阅号开发一个最简单的问答服务,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。介绍如何给您的微信订阅号开发一个最简单的问答服务,非常好玩。实现的场景您
2023-06-04

.Net中如何将一个实例的内存二进制内容读出来(超简单方法)

使用System.Runtime.Serialization.FormatterServices类,可以在.NET中轻松读取实例的内存二进制内容。通过创建序列化流、填充流以及获取二进制内容,即可完成此过程。确保要序列化的类型已标记为[Serializable],并注意此方法仅适用于浅拷贝。对于需要更高安全性的应用程序,建议使用经过验证的序列化机制,如DataContractSerializer。
.Net中如何将一个实例的内存二进制内容读出来(超简单方法)
2024-04-02

编程热搜

目录