查看: 3530|回复: 7

怎样将V$LATCH_CHILDREN、X$BH、DBA_EXTENTS三张表关联起来

[复制链接]
论坛徽章:
4
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442010新春纪念徽章
日期:2010-03-01 11:04:59授权会员
日期:2010-04-18 17:38:552013年新春福章
日期:2013-02-25 14:51:24
跳转到指定楼层
1#
发表于 2007-7-3 13:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何根据 cache buffer chains 从 v$latch_children / x$bh /dba_extents 可联合找到这些热点数据块位于什么 段,再将这个和 频繁大量执行的 sql 所涉及的 段联合对比一下。
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
2#
发表于 2007-7-3 14:27 | 只看该作者
1 从 v$latch_children 中找出latch的地址addr
2 SELECT OBJ data_object_id, FILE#, dbarfil , DBABLK,CLASS, STATE, TCH
  FROM X$BH
WHERE HLADDR = 'address of latch'
  ORDER BY TCH;

X$BH.TCH is a touch count for the buffer. A high value for X$BH.TCH indicates a hot block
3  SELECT OBJECT_NAME, SUBOBJECT_NAME
  FROM DBA_OBJECTS
WHERE DATA_OBJECT_ID = &obj;

以上可以定位到hot block是在哪个对象上
4 也可以关联dba_extents找到segment_name

在第2步中找到了dbarfi和dbablk可以和DBA_EXTENTS中的relative_fno,block_id , blocks相关联

使用道具 举报

回复
论坛徽章:
9
会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鸡
日期:2008-01-02 17:35:53奥运会纪念徽章:花样游泳
日期:2008-05-27 23:33:24奥运会纪念徽章:垒球
日期:2008-06-17 15:23:21奥运会纪念徽章:足球
日期:2008-07-14 17:22:53奥运会纪念徽章:跳水
日期:2008-08-06 16:18:33奥运会纪念徽章:曲棍球
日期:2008-09-11 10:05:202011新春纪念徽章
日期:2011-02-18 11:43:35
3#
发表于 2008-11-14 15:00 | 只看该作者
v$latch  反映的是某latch 整体情况.
10g  latch的种类很多 
举个例子:
cache buffers chains        这个latch . 产生这个 latch 对应的数据块对象可能有很多.可能是表也可能是索引.每一个块对应的buffer 就会产生一个子latch .但是所有的这些latch 都是属于父latch的同一类型latch.

为什么要引入子latch 的概念.
说白了就是通过children addr可以查到具体的 产生cache  的地址.

出差住某宾馆谁都知道.但是主哪个房子.那个铺位.就不知道了.子地址就是告诉你这些.

用途:大师已经说的很明白了.
狗尾逐貂一下.
把大师的这个语句解析一下:
2 SELECT OBJ data_object_id, FILE#, dbarfil , DBABLK,CLASS, STATE, TCH
  FROM X$BH
WHERE HLADDR = 'address of latch'
  ORDER BY TCH;
HLADDR:这个 buffer cache lru 地址
OBJ:   对象id
通过dba_objects 中OBJECT_ID  就可以打通 v$latch_children 与dba_objects的桥梁.

结论:要想记住东西.先理解他.
要消灭敌人.想了解他.《孙子兵法.谋攻第三》:知己知彼,百战不贻

[ 本帖最后由 tanfufa 于 2008-11-14 15:22 编辑 ]

使用道具 举报

回复
论坛徽章:
4
祖国60周年纪念徽章
日期:2009-10-09 08:28:00
4#
发表于 2008-11-14 15:04 | 只看该作者
原帖由 tanfufa 于 2008-11-14 15:00 发表
v$latch  反映的是某latch 整体情况.
10g  latch的种类很多 
举个例子:
cache buffers chains        这个latch . 产生这个 latch 对应的数据块对象可能有很多.可能是表也可能是索引.每一个块对应的buffer 就会产生一个子latch .但是所有的这些latch 都是属于父latch的同一类型latch.

为什么要引入子latch 的概念.
说白了就是通过children addr可以查到具体的 产生cache  的地址.

出差住某宾馆谁都知道.但是主哪个房子.那个铺位.就不知道了.子地址就是告诉你这些.



形容的非常形象

使用道具 举报

回复
论坛徽章:
0
5#
发表于 2008-11-14 15:07 | 只看该作者
原帖由 warehouse 于 2007-7-3 14:27 发表
1 从 v$latch_children 中找出latch的地址addr
2 SELECT OBJ data_object_id, FILE#, dbarfil , DBABLK,CLASS, STATE, TCH
  FROM X$BH
WHERE HLADDR = 'address of latch'
  ORDER BY TCH;

X$BH.TCH is a touch count for the buffer. A high value for X$BH.TCH indicates a hot block
3  SELECT OBJECT_NAME, SUBOBJECT_NAME
  FROM DBA_OBJECTS
WHERE DATA_OBJECT_ID = &obj;

以上可以定位到hot block是在哪个对象上
4 也可以关联dba_extents找到segment_name

在第2步中找到了dbarfi和dbablk可以和DBA_EXTENTS中的relative_fno,block_id , blocks相关联



学习

使用道具 举报

回复
论坛徽章:
75
生肖徽章:猪
日期:2014-09-05 10:25:05指数菠菜纪念章
日期:2016-10-17 16:12:49生肖徽章:兔
日期:2015-02-05 16:49:02生肖徽章:鼠
日期:2015-02-05 16:49:02生肖徽章:鼠
日期:2015-02-05 16:49:02生肖徽章:马
日期:2015-02-05 16:49:02生肖徽章:羊
日期:2015-02-06 08:40:35生肖徽章:羊
日期:2015-02-06 08:40:34股神
日期:2015-01-05 08:27:16菲尼克斯太阳
日期:2014-12-29 13:11:51
6#
发表于 2008-11-21 17:22 | 只看该作者
原帖由 tanfufa 于 2008-11-14 15:00 发表
每一个块对应的buffer 就会产生一个子latch .但是所有的这些latch 都是属于父latch的同一类型latch.



同意LS的大部分意见,
但对这句话表示怀疑。
在 Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production 做个测试:

TYPE TYPE                                     PARENT   CHILD
NUMBER NAME                                      LATCH LATCHES
98 cache buffers chains                          1    2048

可以查询到cache buffers chains                共有2048个子latch,

SQL> select count(*) from x$bh;

  COUNT(*)
----------
    148875
应该是一个  cache buffers chains          管理多个hash bucket, 而hash bucket中的block是根据DBA  hash后的分布。

使用道具 举报

回复
论坛徽章:
15
奥运会纪念徽章:击剑
日期:2008-07-17 14:58:53懒羊羊
日期:2015-03-04 14:52:11马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152012新春纪念徽章
日期:2012-01-04 11:53:54ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-01-04 10:35:17ITPUB9周年纪念徽章
日期:2010-10-08 09:34:01
7#
发表于 2008-11-21 23:27 | 只看该作者
楼上正解!

使用道具 举报

回复
论坛徽章:
5
双黄蛋
日期:2011-07-05 09:45:13咸鸭蛋
日期:2011-07-12 23:03:41ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22双黄蛋
日期:2011-12-26 15:28:03ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:33
8#
发表于 2014-4-16 11:04 | 只看该作者
select hladdr,
       obj,
       b.sid,
       b.sql_id,
       (select object_name
          from dba_objects
         where (data_object_id is null and object_id = x.obj)
            or data_object_id = x.obj
           and rownum = 1) as object_name,
       dbarfil,
       dbablk,
       tch,
       TIM
  from x$bh x,
       (select P1RAW, sql_id, sid
          from v$session
         where wait_class <> 'Idle'
           and event = 'latch: cache buffers chains') b
where HLADDR = b.p1raw
order by tch desc;

使用道具 举报

回复

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

本版积分规则 发表回复

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