楼主: guoyJoe

[原创] 逻辑读产生Cache Buffer Chain(简称CBC) Latch的解析

[复制链接]
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
11#
发表于 2013-2-18 13:49 | 只看该作者
dtrace 牛B 向搂主学习

使用道具 举报

回复
论坛徽章:
190
生肖徽章:狗
日期:2006-11-23 04:26:03生肖徽章:羊
日期:2007-09-26 17:08:21生肖徽章:马
日期:2007-09-26 17:08:49授权会员
日期:2007-12-31 19:14:41生肖徽章2007版:牛
日期:2008-03-28 10:02:30奥运会纪念徽章:柔道
日期:2008-04-30 16:28:44奥运会纪念徽章:垒球
日期:2008-05-12 21:28:28奥运会纪念徽章:体操
日期:2008-06-26 10:00:41奥运会纪念徽章:沙滩排球
日期:2008-07-27 12:41:59奥运会纪念徽章:艺术体操
日期:2008-07-30 11:09:47
12#
发表于 2013-2-18 13:52 | 只看该作者

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
13#
发表于 2013-2-18 14:40 | 只看该作者
mark

使用道具 举报

回复
论坛徽章:
490
红宝石
日期:2014-04-05 19:53:18海蓝宝石
日期:2014-04-05 21:24:30数据库板块每日发贴之星
日期:2013-05-27 22:53:45生肖徽章:鸡
日期:2014-08-24 18:39:29青年奥林匹克运动会-羽毛球
日期:2014-09-24 08:37:59马上有房
日期:2015-01-03 10:23:28喜羊羊
日期:2015-03-04 14:54:422015年新春福章
日期:2015-03-06 11:59:47秀才
日期:2017-04-06 18:09:28版主6段
日期:2014-05-27 02:19:57
14#
 楼主| 发表于 2013-2-18 15:55 | 只看该作者
本帖最后由 guoyJoe 于 2013-2-18 16:16 编辑
vage 发表于 2013-2-18 13:19
逻辑读开始之后到sskgsldecr释放CBC Latch,有两个地方调用sskgslcas,有一个sskgslcas是Buffer Pin,这个L ...

这个问题提的很好,为了能更好的解释,我再次用dtrace跟踪 一把,先查一下本会话下的进程号:
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
------------------------
1555
进程号为1555

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 gyj1

SQL> select hladdr from x$bh where file#=6 and dbablk=135;
HLADDR
----------------
00000003A4282A90

SQL> select id,name from gyj.t1 where rowid='AAASP9AAGAAAACHAAA';
        ID NAME
---------- ----------------------------------------------------------------------------------------------------
         1 gyj1

接着用dtrace跟踪这个进程:
bash-3.2# ./dtrace.d -x switchrate=1hz -b 32m 1555 > dtrace111.log
dtrace: script './dtrace.d' matched 160196 probes

然后会到回话号1555中执行
SQL> select id,name from gyj.t1 where rowid='AAASP9AAGAAAACHAAA';
        ID NAME
---------- ----------------------------------------------------------------------------------------------------
         1 gyj1

从dtrace日志中贴出刚刚vage大师提的部分:
  0  51768             kcbgtcr:entry i=643 PID::entry:==pid1555:oracle:kcbgtcr:entry fffffd7ffac27cd8 0 2fe 0 23dede0 fffffd7fffdfa790
  0  51769                  sskgslcas:entry i=644 PID::entry:==pid1555:oracle:sskgslcas:entry 3a4282a90 0 1 0 0 3a4c8b1a0
  0  60716                     ktrexf:entry i=645 PID::entry:==pid1555:oracle:ktrexf:entry fffffd7fffdfa790 d7fcd60 0 15398551572 1fe8 23dc9f0
  0  64186                     kcbzgs:entry i=646 PID::entry:==pid1555:oracle:kcbzgs:entry 1 d7fcd60 0 0 395fe35c8 23dc9f0
  0  53941           kssadf_numa_intl:entry i=647 PID::entry:==pid1555:oracle:kssadf_numa_intl:entry 23 3a41458b0 3a4874d70 0 0 13
  0  51769                  sskgslcas:entry i=648 PID::entry:==pid1555:oracle:sskgslcas:entry 395fe3610 0 1 0 395fe35c8 395fe35c8  -------如果判断这个就是buffer pin呢?????
  0 128723                 sskgsldecr:entry i=649 PID::entry:==pid1555:oracle:sskgsldecr:entry 3a4282a90 1 1 0 1 2000000000000000

dump出buffer header日志,找到6号文件135号块的bh
SQL> alter session set events 'immediate trace name buffers level 1';
直接dump6号文件135号块也可以,11g可以直接看块上的BH:
SQL> alter system dump datafile 6 block 135;

---红色部分就是6号文件135号块的bh的信息
BH (0x395fe35c8) file#: 6 rdba: 0x01800087 (6/135) class: 1 ba: 0x395d34000
  set: 5 pool 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 245,28
  dbwrid: 0 obj: 74749 objn: 74749 tsn: 7 afn: 6 hint: f
  hash: [0x3a42842b0,0x3a42842b0] lru: [0x395fe37e0,0x395fe3580]
  ckptq: [NULL] fileq: [NULL] objq: [0x395fe3808,0x3947e6b18]
  st: XCURRENT md: NULL tch: 38
  flags: block_written_once redo_since_read
  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [1]
  cr pin refcnt: 0 sh pin refcnt: 0



0  51769                  sskgslcas:entry i=648 PID::entry:==pid1555:oracle:sskgslcas:entry 395fe3610 0 1 0 395fe35c8 395fe35c8
BH (0x395fe35c8)--这是6号文件135号块的BH地址

比较0x395fe35c8和0x395fe3610的地址偏移量相差72个字节,一个BH大小约200字节,即buffer pin位于BH的第72个字节

用oradebug查一下buffer pin的值
SQL> oradebug peek 0x395fe3610 4
[395FE3610, 395FE3614) = 00000001   --获得buffer pin
SQL> oradebug peek 0x395fe3610 4
[395FE3610, 395FE3614) = 00000000  --释放buffer pin


可以配合mdb设断点来观察buffer pin的值
-bash-3.2# mdb -p 1555
Loading modules: [ ld.so.1 libc.so.1 ]
> kcbgtcr:b  --开始逻辑读
> :c
mdb: stop at kcbgtcr
mdb: target stopped at:
kcbgtcr:        pushq  %rbp
> sskgsldecr:b --获得Buffer Pin马上释放CBC Latch
> :c
mdb: stop at sskgsldecr
mdb: target stopped at:
sskgsldecr:     lock subq %rsi,(%rdi)
> ::delete all
> kcbrls:b   --释放Buffer Pin
> :c
mdb: stop at kcbrls
mdb: target stopped at:
kcbrls:         pushq  %rbp
> sskgsldecr:b  --释放CBC Latch
> :c
mdb: stop at sskgsldecr
mdb: target stopped at:
sskgsldecr:     lock subq %rsi,(%rdi)
> ::quit






使用道具 举报

回复
论坛徽章:
2
2013年新春福章
日期:2013-02-25 14:51:242014年世界杯参赛球队: 波黑
日期:2014-06-13 11:28:41
15#
发表于 2013-2-18 16:41 | 只看该作者
, 先理解下结论,慢慢体会
希望郭老师继续出精彩文章!

使用道具 举报

回复
论坛徽章:
70
夏利
日期:2013-09-29 21:02:15天蝎座
日期:2016-03-08 22:25:51嫦娥
日期:2014-03-04 16:46:45ITPUB年度最佳技术原创精华奖
日期:2014-03-04 16:19:29马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:11
16#
发表于 2013-2-19 08:05 | 只看该作者
guoyJoe 发表于 2013-2-18 15:55
这个问题提的很好,为了能更好的解释,我再次用dtrace跟踪 一把,先查一下本会话下的进程号:
SQL> select s ...

,也就是说,Buffer Pin锁说白了就是Buffer Head中的4个字节,在Solaris 64位系统中,它的偏移量在BH的72字节处。

使用道具 举报

回复
论坛徽章:
58
生肖徽章2007版:马
日期:2009-11-06 23:12:33授权会员
日期:2013-01-10 14:38:592013年新春福章
日期:2013-02-25 14:51:24马自达
日期:2013-08-07 10:54:45红旗
日期:2013-08-09 13:48:48劳斯莱斯
日期:2013-09-12 15:56:37萤石
日期:2013-10-31 08:44:19优秀写手
日期:2013-12-18 09:29:13Jeep
日期:2014-01-14 10:53:432014年新春福章
日期:2014-02-18 16:43:09
17#
发表于 2013-2-19 09:25 | 只看该作者
奥吆 !国大事   开坛了 ……

使用道具 举报

回复
论坛徽章:
490
红宝石
日期:2014-04-05 19:53:18海蓝宝石
日期:2014-04-05 21:24:30数据库板块每日发贴之星
日期:2013-05-27 22:53:45生肖徽章:鸡
日期:2014-08-24 18:39:29青年奥林匹克运动会-羽毛球
日期:2014-09-24 08:37:59马上有房
日期:2015-01-03 10:23:28喜羊羊
日期:2015-03-04 14:54:422015年新春福章
日期:2015-03-06 11:59:47秀才
日期:2017-04-06 18:09:28版主6段
日期:2014-05-27 02:19:57
18#
 楼主| 发表于 2013-2-19 10:13 | 只看该作者
vage 发表于 2013-2-19 08:05
,也就是说,Buffer Pin锁说白了就是Buffer Head中的4个字节,在Solaris 64位系统中,它的偏移量在BH的 ...

如果说的不对请vage版主指正,
看了你写的那篇Dtrace的文章http://www.itpub.net/forum.php?mod=viewthread&tid=1609235,受到了很大的启发,希望你能写更多的Dtrace相关的文章,这样我们可以好好学习一下...

使用道具 举报

回复
论坛徽章:
490
红宝石
日期:2014-04-05 19:53:18海蓝宝石
日期:2014-04-05 21:24:30数据库板块每日发贴之星
日期:2013-05-27 22:53:45生肖徽章:鸡
日期:2014-08-24 18:39:29青年奥林匹克运动会-羽毛球
日期:2014-09-24 08:37:59马上有房
日期:2015-01-03 10:23:28喜羊羊
日期:2015-03-04 14:54:422015年新春福章
日期:2015-03-06 11:59:47秀才
日期:2017-04-06 18:09:28版主6段
日期:2014-05-27 02:19:57
19#
 楼主| 发表于 2013-2-19 10:14 | 只看该作者
yyp2009 发表于 2013-2-19 09:25
奥吆 !国大事   开坛了 ……

阳大新年好,回上海了没?

使用道具 举报

回复
论坛徽章:
490
红宝石
日期:2014-04-05 19:53:18海蓝宝石
日期:2014-04-05 21:24:30数据库板块每日发贴之星
日期:2013-05-27 22:53:45生肖徽章:鸡
日期:2014-08-24 18:39:29青年奥林匹克运动会-羽毛球
日期:2014-09-24 08:37:59马上有房
日期:2015-01-03 10:23:28喜羊羊
日期:2015-03-04 14:54:422015年新春福章
日期:2015-03-06 11:59:47秀才
日期:2017-04-06 18:09:28版主6段
日期:2014-05-27 02:19:57
20#
 楼主| 发表于 2013-2-19 10:14 | 只看该作者
chinaliukai 发表于 2013-2-18 16:41
, 先理解下结论,慢慢体会
希望郭老师继续出精彩文章!

谢谢支持!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表