【转】Cache Buffer Chain 第二篇
文章转自:http://m.bianceng.cn/database/Oracle/201407/42884.htm
测试环境:版本11gR2
SQL> select * from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
一、逻辑读的过程
1、Oracle以每个块的文件号、块号和类型做HASH运算,得到HASH值。根据HASH值,到HASH表中取出指定块的内存地址
2、获取CBC Latch(实验的重点测试部分)
3、根据HASH值,搜索CBC链表
4、根据DBA找到BH(Buffer Header)加Buffer Pin
5、加完Buffer Pin马上释放CBC Latch
6、访问Buffer开始fetch数据
7、获取CBC Latch
8、释放Buffer Pin
9、释放CBC Latch

二、取T1表的第一行数据及ROWID,根据dbms_rowid包查出这行数据的文件号、块号
SQL> select rowid,dbms_rowid.rowid_relative_fno(rowid)
file#,dbms_rowid.rowid_block_number(rowid) block#,id,name from
gyj.t1 where rownum=1;
ROWID FILE# BLOCK# ID NAME
------------------ ---------- ---------- ---------- ----------
AAASP9AAGAAAACHAAA 6 135 1 aaaaa
这里的DBA(Data Block Address)就是由6号文件和135号块组成
三、根据文件号块号获取CBC Latch的地址
SQL> select hladdr from x$bh where file#=6 and dbablk=135;
HLADDR
----------------
00000003A4282A90
四、根据CBC Latch的地址可以查出这个CBC Latch被获得的次数
1.获取CBC Latch的次数为245
SQL> select addr,name,gets from v$latch_children where addr='00000003A4282A90';
ADDR NAME GETS
---------------- ---------------------------------------------------------------- ----------
00000003B09F7C58 cache buffers chains 245
2.再次读取T1表的第一数据,即产生一次逻辑读
SQL>select id,name from gyj.t1 where rowid='AAASP9AAGAAAACHAAA';
ID NAME
-------- ------------
1 gyj1
3.CBC Latch的次数变为247,说明一次逻辑读产生两次CBC Latch
SQL> select addr,name,gets from v$latch_children where addr='00000003A4282A90';
ADDR NAME GETS
---------------- ---------------------------------------------------------------- ----------
00000003A4282A90 cache buffers chains 247
五、查本会话下的进程号
SQL> select spid from v$session s,v$process b where s.paddr=b.addr and s.sid in(select sid from v$mystat where rownum=1);
SPID
------------------------
2416
六、利用Dtrace工具跟踪
1.编写个简单的dtrace脚本
vi dtrace.d
#!/usr/sbin/dtrace -s -n
dtrace:::BEGIN
{
i=1;
}
pid$1:::entry
{
printf("i=%d PID::entry:==%s:%s:%s:%s %x %x %x %d %x %x",i,
probeprov, probemod, probefunc,
probename,arg0,arg1,arg2,arg3,arg4,arg5);
i=i+1;
}
2.授权限
chmod 755 dtrace.d
3.执行dtrace命令生成跟踪日志
./dtrace.d -x switchrate=1hz -b 32m 2416 > dtracecbc.log --用这条命令加大了缓存,避免丢失日志
4.显示主要dtrace部分日志,在dtracecbc.log中搜索latch地址:3A4282A90
CPU ID FUNCTION:NAME
--逻辑读开始
1 63919 kcbgtcr:entry i=592
PID::entry:==pid2416:oracle:kcbgtcr:entry fffffd7ffc98bc00 0 2fe 0
23dede0 fffffd7fffdfa7a0
--获取CBC Latch
1 128720 sskgslcas:entry i=593
PID::entry:==pid2416:oracle:sskgslcas:entry 3a4282a90 0 1 0 0
3a4c953d0
1 60714 ktrexf:entry i=594
PID::entry:==pid2416:oracle:ktrexf:entry fffffd7fffdfa7a0 d7fcd60 0
15392235540 1fe8 23dc9f0
1 64185 kcbzgs:entry i=595 PID::entry:==pid2416:oracle:kcbzgs:entry 1 d7fcd60 0 0 0 23dc9f0
1 53939 kssadf_numa_intl:entry i=596
PID::entry:==pid2416:oracle:kssadf_numa_intl:entry 23 3a4145900
3a487d9e8 0 0 1d
--根据DBA找到BH(Buffer Header)加Buffer Pin
1 128720 sskgslcas:entry i=597 PID::entry:==pid2416:oracle:sskgslcas:entry 3957f6280 0 1 0 3957f6238 3957f6238
--加完Buffer Pin马上释放CBC Latch
1 128723 sskgsldecr:entry i=598
PID::entry:==pid2416:oracle:sskgsldecr:entry 3a4282a90 1 1 0 1
2000000000000000
1 63951 kcbcge:entry i=599
PID::entry:==pid2416:oracle:kcbcge:entry fffffd7ffc98bc00 0 77 0
fffffd7ffc98b7dc 0
1 64116 kcbds2pbh:entry i=600
PID::entry:==pid2416:oracle:kcbds2pbh:entry fffffd7ffc98bc00 0 77 0
fffffd7ffc98b7dc 0
1 60179 ktcckv:entry i=601
PID::entry:==pid2416:oracle:ktcckv:entry fffffd7ffc98bc00
fffffd7ffc98b7d4 77 0 3a3c935f0 0
1 104774 kafger:entry i=602
PID::entry:==pid2416:oracle:kafger:entry 39572e064 fffffd7fffdfb200
39d84e4f0 2 1 1
1 83919 kpofcr:entry i=603
PID::entry:==pid2416:oracle:kpofcr:entry fffffd7fffdfb4b0 1 39d84e4f0 2
4c30d40 3a4fd3790
1 124023 ttcrxh:entry i=604
PID::entry:==pid2416:oracle:ttcrxh:entry d8055e8 d7f58f0
fffffd7fffdfafe0 48 214 1
1 209006 memcpy:entry i=605
PID::entry:==pid2416:libc.so.1:memcpy:entry ddfa329 fffffd7fffdfafe0 30
48 ddfa359 d7f5a00
1 209006 memcpy:entry i=606 PID::entry:==pid2416:libc.so.1:memcpy:entry ddfa35b 39572fff5 2 2 2 d7f5a00
1 123964 ttcc2u:entry i=607 PID::entry:==pid2416:oracle:ttcc2u:entry d8055e8 d7f58f0 39572fff8 4 1 1
1 209006 memcpy:entry i=608
PID::entry:==pid2416:libc.so.1:memcpy:entry ddfa35e 39572fff8 4 852
d7f5a00 d7f5a00
1 61112 ktsmg_max_query:entry i=609 PID::entry:==pid2416:oracle:ktsmg_max_query:entry 0 0 39572fffc 0 d805250 2
1 211309 gethrtime:entry i=610
PID::entry:==pid2416:libc.so.1:gethrtime:entry 92d 1a 39572fffc 8
3a4447d80 39de97dc8
1 128314 slcpums:entry i=611
PID::entry:==pid2416:oracle:slcpums:entry d805218 1a 494b3f016 8
3a443a460 39c253698
1 211401 times:entry i=612
PID::entry:==pid2416:libc.so.1:times:entry fffffd7fffdfb240 1a 494b3f016
8 3a443a460 39c253698
1 131260 kglHandleInvalidations:entry i=613
PID::entry:==pid2416:oracle:kglHandleInvalidations:entry d8055e8
39df04bb0 0 8 d7f1a10 39c2d1140
1 131261 kglHandleLoads:entry i=614
PID::entry:==pid2416:oracle:kglHandleLoads:entry d8055e8 39df04bb0 0 8
d7f1a10 39c2d1140
1 91756 kksGetStats:entry i=615
PID::entry:==pid2416:oracle:kksGetStats:entry 39d738198 39df04bb0 0 8
d7f1a10 39c2d1140
1 72794 kews_sqlcol_end:entry i=616
PID::entry:==pid2416:oracle:kews_sqlcol_end:entry 3a4fd2210
fffffd7ffc9e1ad8 39d737e88 70 1 1
1 110094 qecrlssub:entry i=617
PID::entry:==pid2416:oracle:qecrlssub:entry 39d84ed10 fffffd7ffc9e1ad8 9
0 fffffd7ffc98ac58 0
1 108487 qertbRelease:entry i=618
PID::entry:==pid2416:oracle:qertbRelease:entry 39d84dea8
fffffd7ffc98bae0 9 0 4c0 dbb56b0
1 104779 kafcpy:entry i=619 PID::entry:==pid2416:oracle:kafcpy:entry 39d84e4f0 2 9 0 fffffd7ffc987430 20
--访问Buffer开始fetch数据
1 209006 memcpy:entry i=620
PID::entry:==pid2416:libc.so.1:memcpy:entry fffffd7ffc9f49f8 39572fff8 4
0 30 20
1 209006 memcpy:entry i=621
PID::entry:==pid2416:libc.so.1:memcpy:entry fffffd7ffc9f49e0 39572fff5 2
1 30 20
1 63927 kcbipnns:entry i=622
PID::entry:==pid2416:oracle:kcbipnns:entry fffffd7ffc98bc00 39572fff5
39572fff7 0 fffffd7ffc98bbe8 2c1
【转】Cache Buffer Chain 第二篇的更多相关文章
- 【转】cache buffer chain 第一篇
文章转自:http://www.jydba.net/cache-buffer-chain/ buffer cache的管理有两个重要的数据结构: hash bucket和cache buffer ch ...
- 【原】Cache Buffer Chain 第四篇
作者:david_zhang@sh [转载时请以超链接形式标明文章] 链接:http://www.cnblogs.com/david-zhang-index/p/3873357.html [测试1]低 ...
- 【转】Cache Buffer Chain 第三篇
文章转自:http://oracle.chinaitlab.com/induction/862509.html,文章前部分转载,后部分自己加上的. Oracle数据库只读模式的CACHE BUFFER ...
- [转帖]虚拟内存探究 -- 第二篇:Python 字节
虚拟内存探究 -- 第二篇:Python 字节 http://blog.coderhuo.tech/2017/10/15/Virtual_Memory_python_bytes/ 是真看不懂哦 ...
- 【OpenGL】第二篇 Hello OpenGL
---------------------------------------------------------------------------------------------------- ...
- lnux内核的malloc实现(Oracle的cache buffer影子)
lnux内核的malloc实现(Oracle的cache buffer影子) 本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/artic ...
- Python人工智能第二篇
Python人工智能之路 - 第二篇 : 现成的技术 预备资料: 1.FFmpeg: 链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密码:w ...
- ElasticSearch入门 第二篇:集群配置
这是ElasticSearch 2.4 版本系列的第二篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- SDWebImage源码阅读-第二篇
一 SDWebImageManager的downloadImageWithURL的方法 上一篇,我们刚开了个头,分析了一下开始加载图片之前如何取消其他正在下载的任务,接着,我们回到 - (void) ...
随机推荐
- ios You app information could not be saved. Try again. If the problem persists, contact us
ios You app information could not be saved. Try again. If the problem persists, contact us 大概意思:你的a ...
- 配置Office Outlook 2013
导航 背景——配置过程——错误(Error)——参考资料 背景 最近,折腾了一阵子邮箱客户端,包括:Foxmail.thuderbird.outlook:最后,考虑到outlook对文本的强大的支持能 ...
- 关于erlang反编译的东西
在查阅了相关文档,想了解erlang反编译的东西.当然,源码可以打包成可以获取源码的,也可以保护源码的. 在ebin下,如果没有或者找不到源码,可以进行反编译,由beam文件得到erl文件. 可以通过 ...
- iOS进程间通信之CFMessagePort
本文转载至 http://www.cocoachina.com/industry/20140606/8701.html iOS系统是出了名的封闭,每个应用的活动范围被严格地限制在各自的沙盒中.尽管如此 ...
- WWDC2014 IOS8 APP Extensions
本文转载至 http://blog.csdn.net/jinkaiouyang/article/details/35558623 感谢撰文作者的分享 WWDC14 最令人兴奋的除了新语言sw ...
- accessor mothod mutator mothod 更改器方法 访问器方法 类的方法可以访问类的任何一个对象的私有域!
LocalDate.plusDate String.toUpperCase GregorianCalendar.add import java.time.*; public class Calenda ...
- javascript fetch 跨域请求时 session失效问题
javascript 使用fetch进行跨域请求时默认是不带cookie的,所以会造成 session失效. fetch(url, { method: 'POST', credentials: 'in ...
- 【LeetCode】Maximum Depth of Binary Tree
http://oj.leetcode.com/problems/maximum-depth-of-binary-tree/ public class Solution { public int max ...
- windows64位安装mysql-5.7.12,图文
linux下安装mysql教程一大片,我就不说了,再此说下windows 下如何安装这个5.7版本,并且有些坑已踩! 一:进入mysql下载地址:http://www.mysql.com/downlo ...
- zoom:1
zoom这个特性是IE特有的属性. zoom:1;一般是拿来解决IE6的子元素浮动时候父元素不随着自动扩大的问题,功能相当于overflow:auto,同样也可以用height:1%来代替zoom ...