Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3673177
  • 博文数量: 715
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7745
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(715)

文章存档

2023年(75)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

分类: Oracle

2021-12-13 22:50:02


性能诊断,随迟但到的一个问题

要依据latch类型进行诊断,通常是在sql未绑定变量,热块上出现

先抡几下

  1. --正在等什么latch
  2. SELECT name, 'Child '||child#, gets, misses, sleeps
  3.     FROM v$latch_children
  4.    WHERE addr='&P1RAW'
  5.   UNION
  6.   SELECT name, null, gets, misses, sleeps
  7.     FROM v$latch
  8.    WHERE addr='&P1RAW';

  9. --这个似乎更简单
  10. SELECT * FROM v$latchname
  11.    WHERE latch# = &P2;

  12. --整体情况
  13. select * from (
  14. SELECT latch#, name, gets, misses, sleeps
  15.     FROM v$latch
  16.    WHERE sleeps>0
  17.    ORDER BY sleeps desc) where rownum<11;

  18. -- 确定闩锁活动是否集中在集合中的一个特定闩锁上
  19. SELECT addr, latch#, gets, misses, sleeps
  20.     FROM v$latch_children
  21.    WHERE sleeps>0
  22.      and latch# = &LATCH_NUMBER_WANTED
  23.    ORDER BY sleeps;
  24. 如果有多行,需要注意的重要一点是 SLEEPS 是否合理分布,或者是否有一个或两个子闩锁负责 80% 的 SLEEPS。如果争用集中在一个或两个子锁上,请记下子latch看到了问题 - 请注意 ADDR 列

  25. 还可以查询
  26. V$LATCH_HOLDER --是否一直出现相同的会话
  27. v$session_event
awr里看latch 的统计结果


关于此等待事件的专业讲解:
某些会话正在等待闩锁释放等待但无法获得闩锁。闩锁释放等待保护共享池中的缓冲区缓存或库缓存等内存结构。它们被设计为在很短的时间内举行。如果闩锁不可用,会话将进入睡眠状态并稍后重试该操作。等待闩锁可能很昂贵,因为在等待闩锁时会话可能会在 CPU 上旋转。

Shared Pool Latch
共享池闩锁的争用是由于共享池容量不足、SQL 未共享或大量使用数据字典。确保共享池对于应用程序负载足够大,并且尽可能共享 SQL 语句

Library Cache Latch
库缓存锁存器的争用可能与共享池锁存器的争用有关,因为库缓存位于共享池内。库缓存闩锁争用通常是由于高解析或共享池过小。如果原因是过度的硬解析,那么您需要查看为什么游标被解析得如此之多。由于 Oracle 尝试重用以前解析的应用程序代码,因此假设它是可共享的,则不需要重新解析它。如果库缓存中没有 sql 的已解析表示,则 Oracle 将需要对 sql 进行硬解析

Cache buffers chains
该锁存器用于保护缓冲区缓存中的缓冲区列表。首先固定的进程将获得一个锁存器,因此其他进程不会更改数据。一旦块被取消固定,第二个用户就可以使用它,依此类推。多个会话可能需要同一个块,从而导致争用。
看一看awr中SQL ordered by Gets中的sql、Segments by Logical Reads中对象
阅读(1043) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~