这篇文章将为大家详细讲解有关Cache Buffers Chains的解决思路是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
创新互联公司长期为上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为岭东企业提供专业的网站设计、成都网站制作,岭东网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
Latch free相对来说是Oracle性能调优的一个难点,主要是定位造成CBC的语句,国外数据库专家对latch造诣比较深的是andreynikolaev,Tanel Poder等。
以下是解决该问题的一个思路:
1、查看v$event_name中latch: caches buffers chain中p1,p2和p3值
p1: address; p2: number; p3: tries
2、通过ASH查看发生CBC最多的latch地址
select * from (
select event,
trim(to_char(p1, 'xxxxxxxxxx')) latch_addr,
trim(round(ratio_to_report(count(*)) over ()*100, 1)) ||' % ' PCT,
count(*)
from v$active_session_history
where
event = 'latch: cache buffers chains'
and session_state =' WAITING'
group by event, p1
order by count(*) desc
)
where rownum <10;
输出结果关注等待latch的LATCH_ADDR地址。
3、tanlepoder提供了latchprofx脚本,见附件
(将附件latchprox.jpg改成latchprox.sql)
SQL>@latchprofx.sql sid, name,sqlid, object % "&latch_addr' 10000 --采样率
脚本内使用视图:
x$ksuprlat :关于当前latch holder信息,
Kernel Service, User ,Process LATch holder
x$ksuse: 关于session信息: Kernel Service User SEssion
x$ksllw: latch 内容: Kernel Service Latch context Where
输出结果中,我们关注object地址,可以知道是哪个对象,SQLID可以知道是什么语句。
4、查找文件和数据块对象
select dbms_utility.data_block_address_file(to_number('&object', 'xxxxxxx') file#,
dbms_utility.data_block_address_block(to_number('&object', 'xxxxxxx') blk#
from dual
知道了文件和数据块,我们一种方法用dump block方式知道具体是哪个对象,或者用传统的dba_extents (但该方法查询速度非常慢),或者使用x$BH等方式。查出对应的对象名是什么。
5、通过SQLID查看v$sqlarea,或v$SQL方法获得完整的SQL语句
select sql_fulltext from v$sqlarea where sql_id='&sqlid';
6、通过dbms_xplan.display_cursor脚本(参看前面文章“Oracle 10中如何使用
dbms_xplan分析执行计划”)
列出完整的执行计划。我们通过执行计划重点关注步骤4查出的对象名称
大部分情况下,CBC是改变SQL执行计划,通常造成该问题执行计划显现NL,filter问题。优化该语句基本能解决该问题。
关于Cache Buffers Chains的解决思路是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。