`

Wait Event: cache buffers chains

阅读更多

cache buffers chains是相对比较常见的冲突事件,绝大部分的cache buffers chains是SQL语句访问过多的内存引起,由抵效的SQL引起。个别情况下由于热点访问引起。

简单判断SQL是否访问了过多的内存访问,可以通过简单的看访问返回了多少条记录,经过了多少次buffer gets。一般来说,对于单表查询,获得一条记录不应该超过20个Block gets,而对于Join查询,则不应该超过100个buffer gets。

对于热点块,则可以以以下简单的方式判断:

如果热点正在发生,则只要简单的把wait event的p1raw取出来就可以,看看大家是否在访问相同的latch address。如果总是相同,则是热点,如果不同,则不是热点。

select p1raw from v$session_wait where event_name=’latch: cache buffers chains’;

 

如果是事后判断,则可以通过v$latch_children来间接的判断。

select * from (

select addr, child#,gets,sleeps from v$latch_children

where name=’cache buffers chains’ order sleeps desc

) where rownum<50

 

 

 

如果出现的结果很不均匀,则表示为热点冲突。

可以通过hladdr访问x$BH来获得热点块

select dbarfile,dbablk,tch from x$bh where hladdr=<hladdr>

 

找到热点块之后,只有通过热点数据分布到不同数据块,来降低热点访问。

分布方式

(1)、pctfree

(2)、partition

(3)、重新插入数据



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics