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

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...