深入理解shared pool共享池之library cache系列二
背景
继续上文:深入理解shared pool共享池之library cache系列一,学习library cache数据结构,本文主要学习library cache object(lco)的数据结构:data blocks
为了直观理解,先放一张网上关于DATA BLOCK中存储不同HEAP的结构图:

结论
1,data block是存储不同HEAP的一个结构,每个HEAP存储的内容不同
2,分析heap请最终查看ANONYMOUS LIST:对应的library object handle中的data blocks包括的heap
3,data blocks的结构:
DATA BLOCKS:
data# heap pointer status pins change whr alloc(K) size(K)
----- -------- -------- --------- ---- ------ --- -------- --------
0 a353a238 9d9b7788 I/P/A/-/- 0 NONE 00 2.99 3.12 --heap 0
6 9d9b7ba8 9bb1f118 I/-/A/-/E 0 NONE 00 5.06 7.90 --heap 6
4,dump特定的data blocks 中对应的heap,其命令:
oradebug setmypid
oradebug dump heapdump_addr 2 0xa353a238 ---0x后面对应上述data blocks中对应的heap addr
oradebug tracefile_name
5,上述data blocks不同heap可以在v$sgastat中进行对应起来
测试
---基于应用测试示例,便于直观理解
SQL> show user
USER is "SCOTT"
SQL> create table t_data_block(a int);
Table created.
SQL> select * from t_data_block;
no rows selected
--dump LIBRARY CACHE,仅列出关注部分的内容
BUCKET 36417:
LIBRARY OBJECT HANDLE: handle=a353a480 mtx=0xa353a5b0(1) lct=1 pct=1 cdp=1
name=select * from t_data_block
hash=36f9d01e6a12a3ab7b92ad2ca24a8e41 timestamp=11-23-2015 19:12:41
namespace=CRSR flags=RON/KGHP/TIM/PN0/SML/KST/DBN/MTX/[120100d0]
kkkk-dddd-llll=0000-0001-0001 lock=N pin=0 latch#=4 hpc=0002 hlc=0002
lwt=0xa353a528[0xa353a528,0xa353a528] ltm=0xa353a538[0xa353a538,0xa353a538]
pwt=0xa353a4f0[0xa353a4f0,0xa353a4f0] ptm=0xa353a500[0xa353a500,0xa353a500]
ref=0xa353a558[0xa353a558,0xa353a558] lnd=0xa353a570[0xa353a570,0xa353a570]
LOCK OWNERS:
lock user session count mode flags
-------- -------- -------- ----- ---- ------------------------
9eb51a40 a4726cc0 a4726cc0 1 N [00]
LIBRARY OBJECT: object=9d9b9c28
type=CRSR flags=EXS[0001] pflags=[0000] status=VALD load=0
CHILDREN: size=16
child# table reference handle
------ -------- --------- --------
0 9d9b9b28 9d9b7dd8 a353a2f8 --通过child handle定位到下面的anonymous list中对应的library object handle
DATA BLOCKS:
data# heap pointer status pins change whr alloc(K) size(K)
----- -------- -------- --------- ---- ------ --- -------- --------
0 a35a4038 9d9b9d40 I/P/A/-/- 0 NONE 00 1.59 2.17
BUCKET 36417 total object count=1
ANONYMOUS LIST:
LIBRARY OBJECT HANDLE: handle=a353a2f8 mtx=0xa353a428(0) lct=1 pct=2 cdp=0
namespace=CRSR flags=RON/KGHP/PN0/EXP/[10010100]
kkkk-dddd-llll=0000-0001-0001 lock=N pin=0 latch#=4 hpc=0002 hlc=0002
lwt=0xa353a3a0[0xa353a3a0,0xa353a3a0] ltm=0xa353a3b0[0xa353a3b0,0xa353a3b0]
pwt=0xa353a368[0xa353a368,0xa353a368] ptm=0xa353a378[0xa353a378,0xa353a378]
ref=0xa353a3d0[0x9d9b7dd8,0x9d9b7dd8] lnd=0xa353a3e8[0xa353a3e8,0xa353a3e8]
CHILD REFERENCES:
reference latch flags
--------- ----- -------------------
9d9b7dd8 7 CHL[02]
LOCK OWNERS:
lock user session count mode flags
-------- -------- -------- ----- ---- ------------------------
9eb1fa90 a4726cc0 a4726cc0 1 N [00]
LIBRARY OBJECT: object=9d9b7670
type=CRSR flags=EXS[0001] pflags=[0000] status=VALD load=0
DEPENDENCIES: count=2 size=16
dependency# table reference handle position flags
----------- -------- --------- -------- -------- -------------------
0 9d9b7138 9d9b6e78 a353b358 14 DEP[01]
1 9d9b7138 9d9b6f78 a3539f18 0 DEP[01]
ACCESSES: count=1 size=16
dependency# types
----------- -----
0 0009
TRANSLATIONS: count=1 size=16
original final
-------- --------
a353b358 a353b358
DATA BLOCKS:
data# heap pointer status pins change whr alloc(K) size(K)
----- -------- -------- --------- ---- ------ --- -------- --------
0 a353a238 9d9b7788 I/P/A/-/- 0 NONE 00 2.99 3.12 --heap 0
6 9d9b7ba8 9bb1f118 I/-/A/-/E 0 NONE 00 5.06 7.90 --heap 6
--dump heap 0
SQL> oradebug setmypid
Statement processed.
SQL> oradebug dump heapdump_addr 2 0xa353a238
Statement processed.
SQL> oradebug tracefile_name
/home/ora10g/admin/ora10g/udump/ora10g_ora_22177.trc
--trc文件内容,可见HEAP 0对应的堆名为ccursor,存储SQL执行计划之类我感觉
HEAP DUMP heap name="CCursor" desc=0xa353a238
SQL> select pool,name,bytes from v$sgastat where lower(name) like '%ccursor%';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool CCursor 3062792
--dump heap 6
可见heap 6为存储SQL文本
HEAP DUMP heap name="sql area" desc=0x9d9b7ba8
深入理解shared pool共享池之library cache系列二的更多相关文章
- 深入理解shared pool共享池之library cache系列一
结论 1,oradebug dump library_cache不同级别dump的library cache内容及粒度会有所区别,具体见测试开始部分2,本文测示基于oradebug dump libr ...
- 深入理解shared pool共享池之library cache的library cache lock系列四
本文了解下等待事件library cache lock,进一步理解library cache,之前的文章请见: 深入理解shared pool共享池之library cache的library ca ...
- 深入理解shared pool共享池之library cache的library cache pin系列三
关于library cache相关的LATCH非常多,名称差不多,我相信一些人对这些概念还是有些晕,我之前也有些晕,希望此文可以对这些概念有个更为清晰的理解,本文主要学习library cache p ...
- 共享内存shared pool (3):Library cache
Shared pool物理层面上由许多内存块(chunck)组成.从逻辑功能划分,Shared pool主要由三部分组成:Library cache,Dictionary cache和Control ...
- shared pool详解
共享池shared pool的概念用户提交的命令:解析.执行用户命令的解析解析的过程是一个相当复杂的过程,它要考虑各种可能的异常情况比如SQL语句涉及到的对象不存在.提交的用户没有权限等等而且还需要考 ...
- Oracle-buffer cache、shared pool
http://blog.csdn.net/panfelix/article/details/38347059 buffer pool 和shared pool 详解 http://blog.csd ...
- Oracle Shared Pool 原理
Oracle Shared Pool 原理 由于shared pool中最重要的是library cache,所以本文主要讲解Library cache的结构,library cache latch, ...
- Oracle数据库体系结构-Shared Pool
Oracle数据库简单介绍 对象关系型数据库 重点:一致性+性能 一致性优于性能 处理模型:C/S模型 Client:用户和用户进程 Server:服务器进程,实例,数据库本身 ...
- Oracle内存详解之 Library cache 库缓冲
Oracle内存详解之 Library cache 库缓冲 2017年11月09日 11:38:39 阅读数:410更多 个人分类: 体系结构 Library cache是Shared pool的一部 ...
随机推荐
- WinPcap编程入门实践
转自:http://www.cnblogs.com/blacksword/archive/2012/03/19/2406098.html WinPcap可能对大多数人都很陌生,我在这里就先简单介绍一下 ...
- Devexpress 之gridControl双击行事件
MouseDown事件 protected internal void gridControl1_MouseDown(object sender, MouseEventArgs e) { DevExp ...
- ReadingNotes@02-12-2013
ReadingNotes@02-12-2013 */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Cons ...
- 使用.htaccess实现apache URL重定向
一.什么是URL重定向? URL重定向(URL redirection,或称网址重定向或网域名称转址),是指当使用者浏览某个网址时,将他导向到另一个网址的技术. 二.URL重定向怎么配置? 1)首先需 ...
- Tornado自定义分布式session框架
一.session框架处理请求执行的流程: 1.服务器端生成随机的cookie字符串 2.浏览器发送请求,服务器将cookie返回给浏览器. 3.服务器在生成一个字典.字典的key为cookie,va ...
- Java-String之寻根问底
Java-String之寻根问底 引言 在java编程中,几乎每天都会跟String打交道,因此,深入理解String及其用法十分有必要.下面分三方面来详细说明下String相关的特点及用法 •Imm ...
- linux 下信号处理命令trap && linux下各种信号的意义
1.用途说明 trap是一个shell内建命令,它用来在脚本中指定信号如何处理.比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出 ...
- 001-python基础
1.Python是什么样的语言? 1.1语言的分类: 编译型 解释型 混合型 编译型: 优点:编译器一般会有预编译的过程对代码进行优化. 因为编译只做一次,运行时不需要编译,所以编译型 语言的程序执行 ...
- SQL Server Reporting Services 自定义数据处理扩展DPE(Data Processing Extension)
最近在做SSRS项目时,遇到这么一个情形:该项目有多个数据库,每个数据库都在不同的服务器,但每个数据库所拥有的数据库对象(table/view/SPs/functions)都是一模一样的,后来结合网络 ...
- linux杂谈(十九):DNSserver的配置(二)
1.本机和外网的解析 之前讨论了DNS的正向解析和反向解析,但有的时候我们想让DNSserver对于server本机的解析和对于外网的解析是不同的.那就须要在主配置文件里对本机和外网进行不同的配 ...