您的位置:首页 > 数据库 > Oracle

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

2015-12-20 22:25 543 查看
欢迎转载,转载请标明出处: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: