文档章节

Oracle热快-从认识到定位

Vimeo
 Vimeo
发布于 2016/02/07 15:08
字数 1082
阅读 110
收藏 5



必知:

Latch集中于Buffer Cache的竞争和Shared Pool的竞争。和Buffer Cache相关的主要Latch竞争有cache buffers chains和cache buffers lru chain,和Shared Pool相关的主要Latch竞争有shared pool latch和library cache latch等。

Buffer Cache的Latch竞争经常是由于热点块竞争引起的;Shared Pool的Latch竞争通常是由于sql的大量硬解析引起的。


      CBC latch简介

      热快是一种导致Oracle cache buffers chains latch(cbc)等待事件最常见的原因,网络上有大多只是简单的将热快作为产生CBC等待事件的代名词,

其实产生cbc等待事件有两种常见的原因:

引自Tom大师:
The first main type of latch that will be detailed for Oracle is called the buffer cache latch. 
The buffer cache latch family consists of two types of latches: 
the cache buffers chain latch;
the other is the cache buffers LRU chain latch. 

Another factor for latch contention with buffers chain latches could possibly be hot block contention. Oracle Metalink Note # 163424.1 has some useful tips on tuning and identifying hot blocks within the Oracle database environment.
The other buffer cache latch type is the cache buffers LRU chain latch. Whenever a new block enters the Oracle buffer cache within the SGA, this latch is acquired to allow block management in the Oracle SGA.

Also, the latch is acquired when buffers are written back to disk such as when a scan is performed to move the LRU or least recently used chain of dirty blocks to flush out to disk from the buffer cache.

第一种:热快(hot block);

第二种:cachebuffers LRU chain( cache buffers LRU chain latch)


再看看Oracle官方文档对CBClatch描述:

Latch: cache buffer chains (%)

Description--描述
The cache buffers chains latches are used to protect a buffer list in the buffer cache. These latches are used when searching for, adding, or removing a buffer from the buffer cache.
--cbclatch用来保护buffercache中的buffer列表。
这些latch可从buffer中进行搜索、添加、移除。

Blocks in the buffer cache are placed on linked lists (cache buffer chains) which hang off a hash table. The hash chain that a block is placed on is based on the DBA and CLASS of the block. Each hash chain is protected by a single child latch. Processes need to get the relevant latch to allow them to scan a hash chain for a buffer so that the linked list does not change underneath them.
--处于缓存区中的块被搁置在buffer列表上,这些块挂着一个hash表。
--挂载哈希链的块是基于DBA 和 CLASS块,每一个hash链被一个子latch所保护。而进程需要访问buffer中的块必须先获得cbclatch。


CBC latch等待事件代言人——热快

Contention on this latch usually means that there is a block that is in great contention (known as a hot block).
--这种latch争用通常意味着块的争用(这就是所谓的热快),也就是说默认CBClatch争用指的就是热快。


寻找热快对象

提供两种方法:

第一种,来自Oracle官方文档:

1.首先通过v$latch_children视图定位访问缓存链较多且持有块多的内存地址以及休眠时间:

SELECT 
      addr,
      sleeps
FROM 
      v$latch_children c,
      v$latchname n
WHERE
      n.name='cache buffers chains' and
      c.latch#=n.latch# and
      sleeps > 100
ORDER BY sleeps
/

2.然后从v$bh 以及根据v$latch_children.add相关联,获取具体的文件和数据块号

SELECT file#, dbablk, class, state, TCH
  FROM X$BH
  WHERE HLADDR='address of latch';
  --tch解释:tch:touch count for the buffer,通过tch来定位热快

3.最后通过上述2获取的数据块地址,再根据dba_extents定位具体的段。



第二种,来自Tom大师:

首先通过v$session_wait查找文件number号即P1:

select
   p1 "File #",
   p2 "Block #",
   p3 "Reason Code"
from
   v$session_wait
where
   event = 'buffer busy waits';

然后根据获取的file,block信息,通过dba_extents,查找具体的块

select 
   owner,
   segment_name,
   segment_type
from 
   dba_extents
where 
   file_id = &P1
and 
  &P2 between block_id and block_id + blocks -1;


总结:

1.产生cbc等待事件的原因是热快,也就是说出现热快,就会出现cbc等待事件;

2.通过v$session_wait,x$bh,dba_extents相关联,直接定位热快的对应的具体段;

3.热快的优化无非就是优化SQL,具体的优化说来话长,当然后续有机会再慢慢说。



最后提供Oracle社区直接定位热快的脚本:

select /* 小心使用此脚本,有性能问题-若有疑问,请留言*/
   e.owner ||'.'|| e.segment_name segment_name,
   e.extent_id extent#,
   x.dbablk - e.block_id + 1 block#,
   x.tch,
   l.child#
from
   sys.v$latch_children l,
   sys.x$bh x,
   sys.dba_extents e
where
   x.hladdr = 'ADDR' and
   e.file_id = x.file# and
   x.hladdr = l.addr and
   x.dbablk between e.block_id and e.block_id + e.blocks -1
order by x.tch desc;



脚本定位产生热快的SQL语句,请移步

http://my.oschina.net/1272149624/blog/613508



© 著作权归作者所有

Vimeo
粉丝 5
博文 107
码字总数 35893
作品 0
南昌
数据库管理员
私信 提问
json20080301/myJdbcTemplate

项目背景: 电信行业项目多使用ORACLE数据库,查询SQL的优化也是基于ORACLE执行计划; HIBERNATE在应对大表关联查询时,束手束脚无法很好的优化SQL,需要一个可配置可热部署的类ibatis工具类;...

json20080301
2014/12/12
0
0
请问各位怎样给自己定位重心?

大家好! 我是工作三年的小菜; 首先做下简单的自我介绍;;;;; 从工作开始,我就做.net开发(也只会点这玩意); C/S 、B/S 都有一点,今年初自己认识到对 B/S 兴趣乏乏,开始谋求其它出路...

小秦
2012/12/31
114
0
浅谈Jfinal急速开发框架

使用Jfinal一段时间了,记得当初14年吧,为了建立一个简单的门户网站,想找个轻量型的急速开发框架,然后搜到Jfinal,然后用了一段时间后,确实不错, 现在吧,随着时间的推移,作者对JFinal的版本迭代...

尾生
2016/11/24
203
1
Oracle开发工具--Oracle SQL Handler

Oracle SQL Handler, 是专为Oracle数据库开发人员及操作人员精心打造的一款Oracle开发工具(客户端工具)。国产原创, 精品奉献, 无序列号限制, 仅凭使用满意度随意赞助就可永久使用! 其优...

匿名
2013/05/28
5.4K
1
揭秘阿里选MYSQL惊险历程

  【IT168资讯】由IT168(ITPUB、IXPUB、ChinaUnix)主办的2012中国数据库技术大会(DTCC)于(以下简称大会)2012年4月13日~15日在北京永泰福朋喜来登大酒店隆重召开。大会将针对大数据架构设计...

it168网站
2012/04/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

状态模式

//相当把一个State对象存到Context对象中,然后通过Context实例化对象调用保存的state对象去调用state的相应的方法 https://blog.csdn.net/syc434432458/article/details/51210361...

南桥北木
22分钟前
3
0
基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计

本文首发于:Jenkins 中文社区 使用 JaCoCo 统计功能测试代码覆盖率? 对于 JaCoCo,有所了解但又不是很熟悉。 "有所了解"指的是在 CI 实践中已经使用 JaCoCo 对单元测试代码覆盖率统计: 当...

Jenkins中文社区
29分钟前
4
0
聊聊Elasticsearch的OsProbe

序 本文主要研究一下Elasticsearch的OsProbe OsProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/os/OsProbe.java public class OsProbe { private static f......

go4it
29分钟前
1
0
谈谈lucene的DocValues特性之NumericDocValuesField

在默认实现的DocValuesCosumer中,数值有可能分块存储也有可能放在一个数据块中存储。 分块的大小默认是16384,并且通过预先计算如果按一个块存储最大值与最小值的差所占用的比特数和分块存储...

FAT_mt
47分钟前
2
0
【BATJ】面试必问MySQL索引实现原理

BATJ面试题剖析 1、为什么需要使用索引? 2、数据结构Hash、平衡二叉树、B树、B+树区别? 3、机械硬盘、固态硬盘区别? 4、Myisam与Innodb B+树的区别? 5、MySQL中的索引什么数据结构? 6、...

须臾之余
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部