Fix high "cache buffer chain" waits

from:http://www.dba-oracle.com/t_high_cache_buffer_chain_waits_contention.htm

 

 

Question: We have just upgraded our systems to run Oracle Apps 11.5.10.2 on Solaris 64 bit on Oracle 10.2.0.2.

We have a 9 gig SGA and we're having problems 80/20 and 50/20 "cache buffer chain" waits running 3 concurrent payroll schemes.

 

How to I reduce these "cache buffer chain" latch waits?
 

Answer: The "cache buffer chain" latch wait is normal, but high values are associated with high simultaneous buffer access, similar to a freelist shortage on an index or table segment header.

 

MetaLink also suggests using the _db_block_hash_buckets and
_db_block_hash_latches undocumented parameters have been suggested as a remedy, but always check with MetaLink before using any undocumented parameters.  To see the "cache buffer chain" waits:

select 
   count(*)    child_count,
   sum(gets)   sum_gets,
   sum(misses) sum_misses,
   sum(sleeps) sum_sleeps
from 
   v$latch_children 
where 
   name = 'cache buffers chains';

 

Finding the hot blocks

 

To see the exact blocks that experience the "cache buffer chain" waits, you start byfinding the object associated with the data block and then see if it is a segment header block.  For example, start with this query:

select 
   P1 
from 
   v$session_wait 
where 
   event = 'cache buffer chains';

 

Next, use these directions for using P1 to find the exact data block.

 

If you are using Automatic Segment Storage Management (ASSM), you can seesegment header contention under high DML loads, and you may need to redefine your freelists back to the traditional freelist structures.

 

If you are not using ASSM (bitmap freelists), you can easily relieve the buffer chain latch wait by adding freelists, up to your high-water mark of concurrent DML on the object:

 

alter index hot_idx freelists 4;

 

Metalink has this script to locate a hot block:

select /*+ RULE */
   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;

 

Also, check out if you have undo latch contention The undo segment extension Oracle metric occurs when the undo segment extension is being extended or shrunk. The session must wait until the operation on the undo segment has finished. 
 

select
   swh.seq#,
   sess.sid,
   sess.username username,
   swh.event     event,
   swh.p1,
   swh.p2
from
   v$session               sess,
   v$session_wait_history  swh
where
   sess.sid = 74
and
   sess.sid = swh.sid
order by
   swh.seq#;
 
 
SEQ# SID USERNAME EVENT                       P1         P2
---- --- -------- --------------------------- ---------- ----------
   1  74 PCS      buffer busy waits                    3      21277
   2  74 PCS      latch: cache buffers chains 1556332118        172
   3  74 PCS      latch: cache buffers chains 1556332118        172
   4  74 PCS      buffer busy waits                    4        155

Take the p1raw column from the v$session_wait for the waiting session.

In sum, most buffer cache waits can be fixed with additional freelists, but there are exceptions.  For a full treatment of fixing latch contention, see my book "Oracle Tuning: The Definitive Reference",

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值