Oracle latches


Latch: enqueue hash chains

当数据


 

Latch: cache buffer chains

当数据块被读入SGA的时候,块头(buffer headers)通过一定的算法(mod(dba,_db_block_hash_buckets))被归于不同的hash buckets,然后被hash chains串联起来,Oracle 8i以前每个hash bucket被一个cache buffers chains latch(hash latch,cbc latch)保护,从Oracle 8i开始多个hash buckets被一个cache buffers chains latch保护,Oracle系统中这些对象的数量可以通过如下这些查询得到:
cache buffers chains latch的数量:
1.select count(distinct hladdr) from x$bh;
2.select count(*) from v$latch_children where name='cache buffers chains';
3.select ksppstvl from x$ksppi t1,x$ksppcv t2 where t1.indx=t2.indx and lower(t1.ksppinm)='_db_block_hash_latches';

hash bucket的数量:
1.select ksppstvl from x$ksppi t1,x$ksppcv t2 where t1.indx=t2.indx and lower(t1.ksppinm)='_db_block_hash_buckets';
hash chain的数量与hash bucket的数量相等

当多个进程需要存取被同一条hash chain保护的buffer headers的时候,系统就会出现cache buffers chains latch等待事件,形成这个等待事件主要有两个方面的原因:
1、热点块:
    多个进程同时存储相对集中的数据块,需要从几个方面来着手解决这个问题:
    (1)调整效率低下的SQL语句,降低需要读取的数据块数
    (2)将相对集中的数据打散,使其分散于更多数量的数据块中,解决方法和buffer busy waits等待事件中的类似
    (3)调整隐藏参数_spin_count,增加进程成功获取latch的可能性,这个方法要慎用,增大_spin_count会增加cpu的负荷从而可能造成负面效果
2、hash chain太长:
    如果一条hash chain比其他hash chain长,它所管理的buffer header更多,那么发生cache buffers chains latch等待的几率就更大,针对这个问题,可以通过增加hash bucket的数量进而影响hash chain的数量来达到缩短hash chain的目的


library cache latch

1.


来源:

http://blog.itpub.net/471666/viewspace-615638/

http://www.tuicool.com/articles/m6VBZb     绑定变量与非绑定变量资源消耗对比


http://v.youku.com/v_show/id_XODU2NDE4MzEy.html  (白鳝)latch


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值