文档章节

Oracle热快-从认识到定位

Vimeo
 Vimeo
发布于 2016/02/07 15:08
字数 1082
阅读 593
收藏 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
南昌
数据库管理员
私信 提问
加载中
请先登录后再评论。
C++模板库--C++ B-tree

这是一个google开源的C++模板库,实现了基于B-tree数据结构的有序内存容器。类似于STL的map、set、multimap和multiset模板,C++ B-tree也提供了btreemap、btreeset、btreemultimap和btreemu...

匿名
2013/02/05
3.4K
1
工作流管理系统--Pegasus WMS

Pegasus (飞马座)工作流管理系统包括一套技术标准工作流程应用程序中执行帮助许多不同的环境中,包括桌面、校园集群、网格、云。它弥补了科学领域和执行环境通过自 动映射到分布式资源的高层工...

匿名
2013/02/24
5.4K
0
Swing界面分析和调试工具--Swing Inspector

Swing Inspector是一个Java Swing/AWT用户界面分析和调试工具,功能与firebug类似,具有强大的Swing/AWT用户界面分析和调试相关功能。 适用于从java swing初级到高级的所有开发人员,能够快速...

匿名
2013/03/06
3.4K
0
开源数据访问组件--Smark.Data

Smark.Data是基于Ado.net实现的数据访问组件,提供基于强类型的查询表达式进行灵活的数据查询,统计,修改和删除等操作;采用基于条件驱动的操作模式,使数据操作更简单轻松;内部通过标准SQL...

泥水佬
2013/03/12
2.6K
0
Android 设备管理工具--androrat

androrat 是一个对 Android 设备进行远程管理的工具。 功能包括: 获取通讯录信息 获取呼叫记录 获取短信和彩信 通过 GPS 获取定位 实时监控接收到的短信 监控手机的呼叫状态 拍照 获取来自麦...

匿名
2013/03/28
2.7W
11

没有更多内容

加载失败,请刷新页面

加载更多

matplotlib基础绘图命令之imshow

欢迎关注”生信修炼手册”! 在matplotlib中,imshow方法用于绘制热图,基本用法如下 import matplotlib.pyplot as plt import numpy as np np.random.seed(123456789) data = np.random...

庐州月光
昨天
0
0
[Bazel]自定义工具链

1 前言 2 Non-Platform 方式 3 Platform 方式 3.1 平台 3.2 工具链 3.3 Platform + Toolchain 实现平台方式构建 4 小结 1 前言 本文会讲述 Bazel 自定义工具链的两种方式,Platform 和 Non-...

别打名名
前天
0
0
浏览器在输入URL后,到底发生了什么?

这是一道面试会经常问的问题,平时虽然很常见的操作,但是探究其底层原理,可能并不是一件简单的事情,于是我从各处搜罗整理下全过程,在这里做分享。 第一步:浏览器输入域名 例如输入:www...

lintao111
前天
0
0
通过注解的方式整合 MyBatis + Spring Boot

目录 目录 1. 前言 2. 整合过程 2.1 新建 Spring Boot 项目 2.2 添加 pom 依赖 2.3 准备数据库 2.4 pojo 层 2.5 dao 层 2.7 controller 层 2.8 入口程序配置 2.9 网页测试 1. 前言 本篇博客主...

村雨遥
前天
0
0
字节跳动AI Lab 秋季正式批招聘

0 1 公司简介 字节跳动AI Lab,成立于2016年,致力于开发为字节跳动内容平台服务的创新技术,不仅仅是进行理论研究,我们的想法还可以通过实验证明和快速跟踪用于产品部署。 人工智能涉及的研...

我爱计算机视觉
前天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部