楼主: guoyJoe

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

[复制链接]
论坛徽章:
11
2012新春纪念徽章
日期:2012-01-04 11:56:442015年新春福章
日期:2015-03-06 11:58:39暖羊羊
日期:2015-03-04 14:53:002014年新春福章
日期:2014-02-18 16:44:08问答徽章
日期:2014-01-02 15:42:02优秀写手
日期:2013-12-18 09:29:11ITPUB社区12周年站庆徽章
日期:2013-08-20 11:30:112013年新春福章
日期:2013-02-25 14:51:24复活蛋
日期:2013-01-25 13:54:43奥运纪念徽章
日期:2012-12-06 09:21:40
61#
发表于 2013-4-9 17:56 | 只看该作者
guoyJoe 发表于 2013-4-9 16:44
你的表是建在sys用户下的???做测试最好不要在sys用户下测,很多测试在sys用户下是意想不到的结果。。。 ...

郭总    不是SYS用户  是我的一个测试用户   

使用道具 举报

回复
论坛徽章:
11
2012新春纪念徽章
日期:2012-01-04 11:56:442015年新春福章
日期:2015-03-06 11:58:39暖羊羊
日期:2015-03-04 14:53:002014年新春福章
日期:2014-02-18 16:44:08问答徽章
日期:2014-01-02 15:42:02优秀写手
日期:2013-12-18 09:29:11ITPUB社区12周年站庆徽章
日期:2013-08-20 11:30:112013年新春福章
日期:2013-02-25 14:51:24复活蛋
日期:2013-01-25 13:54:43奥运纪念徽章
日期:2012-12-06 09:21:40
62#
发表于 2013-4-9 18:03 | 只看该作者
guoyJoe 发表于 2013-4-9 16:44
你的表是建在sys用户下的???做测试最好不要在sys用户下测,很多测试在sys用户下是意想不到的结果。。。 ...

噢  上边查ROWID是测试用户   下面查X$BH是在SYS下   造成了在SYS下的假象   刚刚又换了张表测试 结果还是一样   不知道是不是有其它因素会影响到结果

测试用户:
SQL> select rowid,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block# from t where rownum=1;

ROWID                   FILE#     BLOCK#
------------------ ---------- ----------
AAAuA5AAEAAAADsAAA          4        236

SYS用户:

SQL> select hladdr from x$bh where file#=4 and dbablk=236;

未选定行

使用道具 举报

回复
论坛徽章:
11
2012新春纪念徽章
日期:2012-01-04 11:56:442015年新春福章
日期:2015-03-06 11:58:39暖羊羊
日期:2015-03-04 14:53:002014年新春福章
日期:2014-02-18 16:44:08问答徽章
日期:2014-01-02 15:42:02优秀写手
日期:2013-12-18 09:29:11ITPUB社区12周年站庆徽章
日期:2013-08-20 11:30:112013年新春福章
日期:2013-02-25 14:51:24复活蛋
日期:2013-01-25 13:54:43奥运纪念徽章
日期:2012-12-06 09:21:40
63#
发表于 2013-4-9 18:09 | 只看该作者
guoyJoe 发表于 2013-4-9 16:43
这个可以找到啊。我打开vm测试:
idle> idle> select rowid,dbms_rowid.rowid_relative_fno(rowid) file ...

郭大师,你的file3不是UNDO?  

使用道具 举报

回复
论坛徽章:
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
64#
 楼主| 发表于 2013-4-9 23:07 | 只看该作者
xteitxu 发表于 2013-4-9 18:09
郭大师,你的file3不是UNDO?

这个不一定的。这个可以换可以改。。。。

使用道具 举报

回复
招聘 : ORACLE 开发DBA
论坛徽章:
598
65#
发表于 2013-4-18 17:27 | 只看该作者
ggg3838 发表于 2013-3-10 21:51
v哥 咋看出是物理IO导致

V哥的文章没看全啊。他有文章说这个的。

使用道具 举报

回复
论坛徽章:
92
2011新春纪念徽章
日期:2011-01-25 15:42:33咸鸭蛋
日期:2012-03-19 10:46:00版主1段
日期:2012-05-15 15:24:11奥运会纪念徽章:排球
日期:2012-08-29 07:02:50奥运会纪念徽章:跳水
日期:2012-09-26 06:44:27ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32奥运会纪念徽章:击剑
日期:2012-10-12 07:20:332013年新春福章
日期:2013-02-25 14:51:242012新春纪念徽章
日期:2012-02-13 15:13:20
66#
发表于 2013-11-27 22:03 | 只看该作者
dtrace再研究研究,root跑竟然报错。

[host-gz61] host#  ./dtrace.d -x switchrate=1hz -b 32m 19173
dtrace: failed to compile script ./dtrace.d: line 2: probe description pid19173racle::entry does not match any probes

[host-gz61] host# cat dtrace.d
#!/usr/sbin/dtrace -s -n
pid$1racle::entry
{
        printf("PID::entry:==%s:%s:%s:%s %x %x %x %d %x %x", probeprov, probemod, probefunc, probename,arg0,arg1,arg2,arg3,arg4,arg5);
}

使用道具 举报

回复
论坛徽章:
92
2011新春纪念徽章
日期:2011-01-25 15:42:33咸鸭蛋
日期:2012-03-19 10:46:00版主1段
日期:2012-05-15 15:24:11奥运会纪念徽章:排球
日期:2012-08-29 07:02:50奥运会纪念徽章:跳水
日期:2012-09-26 06:44:27ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32奥运会纪念徽章:击剑
日期:2012-10-12 07:20:332013年新春福章
日期:2013-02-25 14:51:242012新春纪念徽章
日期:2012-02-13 15:13:20
67#
发表于 2013-11-28 19:19 | 只看该作者
本帖最后由 玉面飞龙 于 2013-11-28 13:28 编辑

http://andreynikolaev.wordpress. ... shared_latches-ctl/

这个链接倒是说到 CBClatch是shared 的;但是貌似大多数是以exclusive mode去请求


cachebuffers chains is a shared latch. In Jonathan Lewis’s new book <oraclecore>, he mentioned that getting shareable latch only spins 2,000 times bydefault.




想看一下哪个function是负责spin latch的,没有找到。

使用道具 举报

回复
论坛徽章:
92
2011新春纪念徽章
日期:2011-01-25 15:42:33咸鸭蛋
日期:2012-03-19 10:46:00版主1段
日期:2012-05-15 15:24:11奥运会纪念徽章:排球
日期:2012-08-29 07:02:50奥运会纪念徽章:跳水
日期:2012-09-26 06:44:27ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32奥运会纪念徽章:击剑
日期:2012-10-12 07:20:332013年新春福章
日期:2013-02-25 14:51:242012新春纪念徽章
日期:2012-02-13 15:13:20
68#
发表于 2013-12-4 22:43 | 只看该作者
本帖最后由 玉面飞龙 于 2013-12-4 16:45 编辑

在oracle 11.2.0.3 solaris SPARC上测试了一下,CBC latch是以共享模式获得的

具体的:

1) 首先,一次CR READ仍然是需要请求2次CBC latch

BINZHANG@DBATST01: SQL> select rowid,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,ID from binzhang.t  where rownum=1;

ROWID                   FILE#     BLOCK#         ID
------------------ ---------- ---------- ----------
AAADfeAAKAAAVmBAAA         10      88449          1

1 row selected.

SYS@DBATST01: SQL> SYS@DBATST01: SQL> select  hladdr,ba,decode(state,0,'free',1,'xcur',2,'scur',3,'cr', 4,'read',5,'mrec',6,'irec',7,'write',8,'pi',9,'memory',10,'mwrite',11,'donated')   status from x$bh where file#= 10 and dbablk=88449;

HLADDR           BA               STATUS
---------------- ---------------- --------------------------------
00000004D0902F68 000000040C2E4000 xcur


SYS@DBATST01: SQL> select addr,latch#,child#,level#,name,hash,gets,MISSES,SLEEPS,IMMEDIATE_GETS,IMMEDIATE_MISSES,SPIN_GETs,WAIT_TIME from  v$latch_children  where addr='00000004D0902F68';

ADDR                 LATCH#     CHILD# NAME                                 HASH       GETS     MISSES     SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES  SPIN_GETS  WAIT_TIME
---------------- ---------- ---------- ------------------------------ ---------- ---------- ---------- ---------- -------------- ---------------- ---------- ----------
00000004D0902F68        155       1755 cache buffers chains           3563305585        269          0          0              2                0          0          0


BINZHANG@DBATST01: SQL> select  rowid,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,ID from  binzhang.t where  rowid='AAADfeAAKAAAVmBAAA';

ROWID                   FILE#     BLOCK#         ID
------------------ ---------- ---------- ----------
AAADfeAAKAAAVmBAAA         10      88449          1

-- now get is 150; it's 2 CBC latch gets when read buffer by rowid.

ADDR                 LATCH#     CHILD# NAME                                 HASH       GETS     MISSES     SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES  SPIN_GETS  WAIT_TIME
---------------- ---------- ---------- ------------------------------ ---------- ---------- ---------- ---------- -------------- ---------------- ---------- ----------
00000004D0902F68        155       1755 cache buffers chains           3563305585        271          0          0              2                0          0          0

2) solaris SPARC 下 第8个字节表示有多少process正在以shared mode获得该latch

通过很多并行session 执行 “select  rowid,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,ID from  binzhang.t where  rowid='AAADfeAAKAAAVmBAAA'; ”,当有CBC latch争用的时候,执行以下oradebug peak命令,时常可以看到第8个字节为0x1.

SYS@DBATST01: SQL>  oradebug peek 0x00000004D0902F68 24   
[4D0902F68, 4D0902F80) = 00000000 00000001 098F5FE5 009B0000 00000001 000006D4

3) 做和LZ类似的测试

将第8个字节标志为0x1
SYS@DBATST01: SQL> oradebug poke 0x00000004D0902F68 8 1
BEFORE: [4D0902F68, 4D0902F70) = 00000000 00000000
AFTER:  [4D0902F68, 4D0902F70) = 00000000 00000001

SYS@DBATST01: SQL>  oradebug peek 0x00000004D0902F68 24   
[4D0902F68, 4D0902F80) = 00000000 00000001 098F5FE5 009B0000 00000001 000006D4

另外一个进程CR read并没有被阻塞,只是将0x1修改为0x2. 也就是以shared mode 获取到latch,表示有2个process获得了shared mode的CBC latch
[php]
  9 168694                   skgslcas:entry i=529 PID::entry:==pid28673racle:skgslcas:entry 4d0902f68 0 1 56132 44 4cc3d19b8
  9  84051                    kslgess:entry i=531 PID::entry:==pid28673racle:kslgess:entry 4d0902f68 109 1 42031489 6d1 0                            ---- latch miss +1
  9 168695                  skgslocas:entry i=532 PID::entry:==pid28673racle:skgslocas:entry 4d0902f68 1 2 -2147511408 4cc3d1860 40               -- spin + 1
............ pin buffer................
  9 168694                   skgslcas:entry i=541 PID::entry:==pid28673racle:skgslcas:entry 4d0902f68 2 1 524288 10c000 4cc3d19b8
....... read buffer...........
  9 168694                   skgslcas:entry i=562 PID::entry:==pid28673racle:skgslcas:entry 4d0902f68 0 1 42031489 db db
  9  84051                    kslgess:entry i=564 PID::entry:==pid28673racle:kslgess:entry 4d0902f68 9 1 0 6d4 db
  9 168695                  skgslocas:entry i=565 PID::entry:==pid28673racle:skgslocas:entry 4d0902f68 1 2 -2147506944 4cc3d1860 40
...........un-pin buffer.......
  9  99302                     kcbzar:entry i=566 PID::entry:==pid28673racle:kcbzar:entry 4ce90fd50 4d0902f68 108000 -2147505712 1 ffff
  9 168694                   skgslcas:entry i=569 PID::entry:==pid28673racle:skgslcas:entry 4d0902f68 2 1 20678979432 2000000000000000 2
  9 242015                  skgslcas:return i=570 PID::entry:==pid28673racle:skgslcas:return 18 1 2 2 4d0902f68 2

[/php]

想知道如何标记 latch 地址,才能是exclusive mode的?

使用道具 举报

回复
论坛徽章:
0
69#
发表于 2020-3-17 19:52 | 只看该作者
11.2.0.4.0,dtrace之后,cbc的latch在dtrace的日志并没有找到

使用道具 举报

回复

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

本版积分规则 发表回复

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