Chinaunix首页 | 论坛 | 博客
  • 博客访问: 645633
  • 博文数量: 66
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 2204
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-26 21:43
个人简介

曾就职于阿里巴巴担任Oracle DBA,MySQL DBA,目前在新美大担任SRE。[是普罗米修斯还是一块石头,你自己选择!] 欢迎关注微信公众号 “自己的设计师”,不定期有原创运维文章推送。

文章分类

全部博文(66)

文章存档

2017年(2)

2016年(3)

2015年(7)

2014年(12)

2013年(42)

分类: Oracle

2013-12-13 23:30:35

 当用户进程需要读数据到Buffer Cache时,或Cache Buffer根据LRU算法进行管理时,就不可避免地要扫描LRU List获取可用Buffer状态,我们知道,Oracle的Buffer Cache是共享内存,可为众多并发进程并发访问,所以在搜索的过程中必须获取Latch(Latch是Oracle的一种串行锁机制,用于保护共享内存),锁定内存结构,防止并发访问损坏内存中的数据。
     用于锁定LRU的Latch就是经常见到的Cache Buffers Lru Chain。
     SQL> col name for a25
SQL> select addr,latch#,name,gets,misses,immediate_gets,immediate_misses
  2  from v$latch where name='cache buffers lru chain';
ADDR         LATCH#           NAME                          GETS                MISSES    IMMEDIATE_GETS   IMMEDIATE_MISSES
-------- ---------- ------------------------- ------ ------ -------------- -----
05DB0BC8    139        cache buffers lru chain       45648                    22                 58492                                92
Cache Buffers Lru Chain Latch存在多个子Latch,其数量受隐含参数_db_block_lru_latches控制


SQL> select x.ksppinm,y.ksppstvl value,x.ksppdesc describ from
  2  x$ksppi x,x$ksppcv y where x.inst_id=userenv('Instance')
  3  and y.inst_id=userenv('Instance')
  4  and x.indx=y.indx
  5  and x.ksppinm like '%&par%';
输入 par 的值:  db_block_lru_latches
原值    5: and x.ksppinm like '%&par%'
新值    5: and x.ksppinm like '%db_block_lru_latches%'
KSPPINM                                 VALUE                  DESCRIB
------------------------------
_db_block_lru_latches                8                     number of lru latches
SQL> select addr,child#,name,gets,misses,immediate_gets igets,immediate_misses
  2  imisses from v$latch_children where name ='cache buffers lru chain';
ADDR         CHILD# NAME                        GETS MISSES      IGETS    IMISSE
S
-------- ---------- ------------------------- ------ ------ ---------- ---------
-
2DDD0FBC          8 cache buffers lru chain       28      0          1   0
2DDD0C0C          7 cache buffers lru chain       28      0          1    0
2DDD085C          6 cache buffers lru chain       28      0          1    0
2DDD04AC          5 cache buffers lru chain       28      0          1   0
2DDD00FC          4 cache buffers lru chain       28      0          1     0
2DDCFD4C          3 cache buffers lru chain    45876     22      58506         9    2
2DDCF99C          2 cache buffers lru chain      195      0        151         0
2DDCF5EC          1 cache buffers lru chain       28      0          1            0
已选择8行。
 如果该Latch竞争激烈,通常有如下方法可以采用
1.适当增加Buffer Cache,这样可以减少读数据到Buffer Cache的机会,减少扫描LRU List的竞争
2.可以适当的增加LRU Latch的数量,修改_db_block_lru_latches参数可以实现,但是该参数通常来说是足够的。
3.通过多缓冲技术,可以减少不希望的数据老化和全表扫描等操作对于Default池的冲击,从而可以减少竞争。
阅读(1261) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~