10.未公开的Oracle数据库秘密笔记——X$BH表及LATCH争用

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50366079

10.未公开的Oracle数据库秘密笔记——X$BH表及LATCH争用

在Oracle Database Performance Tuning Guide 中对X$固定表 做了部分说明。

         LATCH是ORACLE数据库管理系统用来保护内存结构的一种低层次锁机制。

         缓存缓冲区链的LATCH用来保护处于缓冲区中缓存的缓冲区列表。

查询标识了丢失计数最高的子闩锁:

sys@ORCL> selectname,addr,latch#,child#,misses,sleeps from v$latch_children where misses >10000 order by misses;

通过连接X$BH和DBA_OBJECTS,可以找出子闩锁保护的数据块属于哪些数据库对象。

如下:

SQL>SELECT bh.file#, bh.dbablk, bh.class,decode(bh.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')AS status, decode(bitand(bh.flag,1), 0, 'N', 'Y') AS dirty, bh.tch,

       o.owner, o.object_name, o.object_type

FROM x$bh bh, dba_objects o

WHERE bh.obj=o.data_object_id

AND bh.hladdr='&child_latch_address'

ORDER BY tch DESC;

然后根据对象名字来找到,其他相关属性。

此外可以通过查询V$SESSION_EVENT得到确认。

sys@ORCL> selects.sid,s.serial#,p.spid,e.event,e.total_waits,e.time_waited from v$sessions,v$process p,v$session_event e

    wheres.paddr=p.addr

    ands.sid=e.sid

    ands.type='USER'

    and e.eventlike 'latch%'

    order bytime_waited;

 

no rows selected

得到SPID是操作系统中进程的PID号。

然后执行

SQL>ORADEBUG SETOSPID 5323

然后使用事件10046跟踪这个会话。

SQL>ORADEBUG EVENT 10046 trace name contextforever, level 8

然后使用ESQLTRC-PROF工具进行处理:

下载地址如下:

http://download.csdn.net/detail/notbaron/9368409

 

 

#esqltrcprof.pl ten_5323.trc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值