cache buffer 相关的闩锁等待事件(cache buffers lru chain/cache buffers chain)

cache buffers lru chain
原因
高负荷的cache吞吐量,效率差的sql语句(全表扫描,或不正确的index range scans)
dbwr写出速度太慢,前台进程花费很多时间持有latch查找free buffer。

cache buffers lru chain保护buffer的链表在cache中,当增加,移除,移动一个buffer从list时,cblc latch必须被获取。
在SMP(对称多处理)的系统上,oracle自动设置LRU latche数量是cpu个数的一半。
在有很多处理器的系统里,对cblc latch的争用会影响性能,LRU latch争用可以被通过查询V$LATCH, V$SESSION_EVENT, V$SYSTEM_EVENT等视图识别问题。
为了避免争用,考虑优化应用,绕过buffer cache对于batch,dss任务,或者重新设计应用。
cache buffers chains
cbc latch用来保护buffer cache中的buffer 链表,
当在链表中搜索,增加,移除buffer时就需要获取cbc latch。
cbc latch的争用通常是由于某个buffer频繁被使用。
如果特定的子latch在与其它子latch比较后有很多的gets,MISSES, SLEEPS。
获取该latch的内存地址,通过V$LATCH_CHILDREN.ADDR与X$BH去关联,就能找到特定的热块。
SELECT OBJ data_object_id, FILE#, DBABLK,CLASS, STATE, TCH
FROM X$BH
WHERE HLADDR = ‘address of latch‘
ORDER BY TCH;

X$BH.TCH是一个接触计数器,tch高表明这是个热块。
一个latch会保护很多块,这些块中间的某个块可能就是热块,一个高tch值的块将是一个潜在的热块。执行如下查询多次
识别出多次出现的块,查询DBA_EXTENT得到块所在的segment。
SELECT OBJECT_NAME, SUBOBJECT_NAME
FROM DBA_OBJECTS
WHERE DATA_OBJECT_ID = &obj;

时间: 2024-10-12 21:32:30

cache buffer 相关的闩锁等待事件(cache buffers lru chain/cache buffers chain)的相关文章

Oracle Buffer Pool内部闩锁机制

本文中根块,枝块,叶块,表块分别是索引根块,索引枝块,索引叶块,数据表块的简称. 此外本文大多数观点来自于大师吕海波<Oracle内核技术揭秘>一书,本博文为个人感想. 首先需要明确4点关于CBC LATCH和BUFFER PIN的知识点: 1. 对于根块和枝块,CBC LATCH都是以S模式获取的,无BUFFER PIN 2. 对于叶块,CBC LATCH是以X模式获取的,BUFFER PIN是以S模式获取的 3. 对于表块,CBC LATCH是以X模式获取的,SELECT语句的BUFFER

shared pool 和buffer pool 详解(之二, Cache Buffers LRU Chain、Cache Buffers LRU Chain闩锁竞争与解决)

[深入解析--eygle]学习笔记 1.1.2  Cache BuffersLRU Chain闩锁竞争与解决 当用户进程需要读数据到Buffer Cache时或Cache Buffer根据LRU算法进行管理等,就不可避免的要扫描LRU  List获取可用Buffer或更改Buffer状态,我们知道,Oracle的Buffer Cache是共享内存,可以为众多并发进程并发访问,所以在搜索的过程中必须获取Latch(Latch是Oracle的一种串行锁机制,用于保护共享内存结构),锁定内存结构,防止

Undo 相关的等待事件和已知问题 (Doc ID 1575701.1)

Undo Related Wait Events & Known Issues (Doc ID 1575701.1) APPLIES TO: Oracle Database - Enterprise Edition - Version 9.2.0.8 to 11.2.0.4 [Release 9.2 to 11.2]Oracle Database Cloud Schema Service - Version N/A and laterOracle Database Exadata Express

遇到Library cache load lock 等待事件

遇到Library cache load lock 等待事件: 在Troubleshooting Library Cache: Lock, Pin and Load Lock (Doc ID 444560.1)这篇文章中,详细解释了该等待事件: If an object is not in memory, then a library cache lock cannot be acquired on it. The object has to be loaded into the memory

Oracle Study之--Oracle等待事件(1)

Oracle Study之--Oracle等待事件(1) 一. 等待事件的相关知识1.1 等待事件主要可以分为两类: 即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件.2). 非空闲等待事件专门针对ORACLE的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件 是在调整数据库的时候需要关注与研究的.在Oracle 10g中的等待事件有874个,11g中等待事件1118个.

ORACLE 常见等待事件

一. 等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件.2). 非空闲等待事件专门针对ORACLE的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件 是在调整数据库的时候需要关注与研究的. 在Oracle 10g中的等待事件有872个,11g中等待事件1116个. 我们可以通过v$event_name 视图来查看等待事件

oracle 死锁和锁等待的区别

所谓的锁等待:就是一个事务a对一个数据表进行ddl或是dml操作时,系统就会对该表加上表级的排它锁,此时其他的事务对该表进行操作的时候会等待a提交或是回滚后,才可以继续b的操作 所谓的死锁:当两个或多个用户相互等待锁定的数据时就会发生死锁,这时这些用户被卡在不能继续处理业务,oracle可以自动检测死锁并解决他们,通过回滚一个死锁中的语句,释放锁定的数据,回滚的话会遇到ora-00060 deadlock detected while waiting for resource 模拟锁等待: 两个

SQL Server里的闩锁介绍

在今天的文章里我想谈下SQL Server使用的更高级的,轻量级的同步对象:闩锁(Latch).闩锁是SQL Server存储引擎使用轻量级同步对象,用来保护多线程访问内存内结构.文章的第1部分我会介绍SQL Server里为什么需要闩锁,在第2部分我会给你介绍各个闩锁类型,还有你如何能对它们进行故障排除. 为什么我们需要闩锁? 闩锁首次在SQL Server 7.0里引入,同时微软首次引入了行级别锁(row-level locking).对于行级别锁引入闩锁的概念是非常重要的,不然的话在内存中

BUFFER CACHE之主要的等待事件

原因:资源紧张,等待其释放. 原因的原因:1. lgwr和DBWn进程写太慢:2. Buffer和latch不可用 原因的原因的原因:全表扫描.library cache latches数太多等. 视图:V$SYSTEM_EVENT (instance-level waits), V$SESSION_EVENT (session-level waits) 注意: 等待与共享池和缓冲池中的高命中率(high hit ratios)无关!换句话说,高命中率也会有长时间的等待. * Buffer Bu