buffer cache —— latch: cache buffers lru chain

来源:互联网 发布:杨振宁 院士 知乎 编辑:程序博客网 时间:2024/05/22 03:16

想查看或修改working set(LRU+LRUW)的进程,始终要持有管理相应工作组的cache buffers lru chain锁存器。若在此过程中发生争用,则等待latch: cache buffers lru chain事件。

SQL> select name,parameter1,parameter2,parameter3 from v$event_name where name like 'latch: cache buffers lru chain';NAME                           PARAMETER1           PARAMETER2           PARAMETER3------------------------------ -------------------- -------------------- --------------------latch: cache buffers lru chain address              number               tries
Oracle在如下情况下必须获得cache buffers lru chain锁存器:

1、进程欲读取还没有装到内存上的块时,通过查询LRU列分配到所需要的空闲缓冲区,此在过程中需要cache buffers lru chain锁存器。

2、DBWR为了将脏缓冲区记录到数据文件上,查询LRUW列,将相应缓冲区移动到LRU列的过程中也要获得cache buffers lru chain锁存器。


cache buffers lru chain锁存器争用的最重要原因是过多的请求空闲缓冲区。低效sql语句是过多请求空闲缓冲区的最典型情况,若多个session同时执行低效的sql语句,则在查询空闲缓冲区过程中和记录脏缓冲区的过程中,为了获取cache buffers lru chain锁存器发生争用。

我们必须理解cache buffers chain锁存器和cache buffers lru chain锁存器争用间的差别。若是多个会话同时扫描同一个表或索引时,则发生cache buffers chain锁存器争用的概率高,因为对相同chain发生了争用。但是,多个会话同时扫描不同的表或索引时,发生cache buffers lru chain锁存器争用的概率高。多个会话将不同的块载入到内存过程中,确保空闲缓冲区的请求会增多,因此发生对工作组争用的概率将提高。特别是因为数据修改频繁,以至于脏缓冲区数量多,正因此DBWR因为检查点而查询LRUW列的次数频繁,所以cache buffers lru chain锁存器争用将更加严重。cache buffers lru chain锁存器争用的另一个重要特点就是伴随着物理I/O。若是低效的索引扫描引起的问题,则同时发生db file sequential read等待和cache buffers lru chain锁存器争用;若是不必要的全表扫描引起的问题,则同时db file scattered read等待和cache buffers lru chain锁存器争用。事实上,cache buffers chain锁存器和cache buffers lru chain锁存器争用同时发生的情况较多,因为复杂的应用程序将复合的应用上述模式。

低效的sql引起的cache buffers lru chain锁存器争用发生时,sql语句的恰当调优就是最好的解决方案。

原创粉丝点击