Oracle Latch及latch矛盾
来源:互联网 发布:玻璃水 知乎 编辑:程序博客网 时间:2024/05/16 04:55
小引
Oracle Rdbms施用了各种不同类型的锁定机制,latch等于此中的一种,正文将集中引见latch(闩)的概念,懂得latch的兑现步骤并说明唤起latch摩擦的缘故。
什么是latch
Latch是用来保护SGA区中共享数据结构的一种串行化锁定机制。Latch的兑现是与操作系统相干的,尤甚和一个过程是不是亟需等候一个latch、急需等候多长时间相关。
Latch 是一种能够极快地被获取和开释的锁,它一般用来保护描述buffer cache中block的数据结构。与每个latch相联系的再有一个扫除进程,应怀有latch的历程变成死历程时,该扫除历程就会被调用。Latch 还具有相干级别,用来防止死锁,万一一个历程在某个级别上失去一个latch,它就不可能再取得同等或仅次于该级别的latch。
Latch与Enqueue(行列)
Enqueue 是Oracle施用的另一种锁定机制,它愈加复杂,容许几个并发过程不同程度地共享某些资源。任何可被并发运用的对象均可应用enqueue加以保护。1 个典型的事例是表的锁定,我们容许在一个表上有不平级别的共享。与latch不同之居于于,enqueue是运用操作系统特定的锁定机制,一个 enqueue容许用户在锁上贮存一个标记,来表明请求锁的方式。操作系统lock manager追踪全部被锁定的资源,如其某个过程不能获取它所请求的那种锁,操作系统就把请求过程置于一个等候行列中,该行列按FIFO准则部署,而在 latches中是没象enqueue中排序的等候行列,latch等候过程要不应用定时器来唤醒和重试,要不spin(只用以多处理器情况下)。
几时急需latch
应一个历程预备访问SGA中的数据结构时,它就需要取得一个latch。应过程取得latch后,它将一直怀有该latch直到它不再运用此数据结构,这时候latch才会被开释。可通过latch姓名来界别它所保护的不同数据结构。
Oracle 运用元授命对latch开展操作, 应所需的latch已被其余过程怀有时,施行授命过程将终止施行一部分授命,直到该latch被开释为止。从根本上讲,latch防止并发访问共享数据结 构,因为设立和开释latch的授命是不可瓜分的,操作系统就可以责任书唯有一个历程取得latch,又因为这只是单条授命,之所以实施速度很快。latch 被握有的时间是很短,并且提供了当持有人不正常间断时的驱除机制,该驱除工作是由Oracle后台老板过程PMON来完成的。
什么招致latch摩擦
Latch 保护SGA中的数据结构被多个用户与此同时访问,如其一个过程不能立时失去所需latch,它就必须等候,这就罗致了CPU的额外负担和系统的速度减低。额外 的CPU运用是过程‘spining’以致的,‘spining’是指历程定时地反复尝试获取latch,在接续两次其间,过程处在休眠状态,在失去 latch先期,spining历程将反复开展下去。
何以标识内部latch的摩擦
Server manager monitor是一个对等有用的来监视latch等候、请求和摩擦的工具。也可查询相干的数据字典表:v$latch, v$latchholder, v$latchname。
v$latch 表的每一起包括了对不同门类latch的统计,每一列体现了不同门类的latch请求的活钟情况。不同门类的latch请求其间的差异介于,应latch 不可马上取得时,请求历程是不是继续进行。按此分门别类,latch请求的门类可分为两类:willing-to-wait和immediate。
Willing-to-wait : 是指如若所请求的latch不能立刻失去,请求历程将等候1很短的时间后再度下发请求。历程一直反复此历程直到失去latch。
Immediate:是指如若所请求的latch不能立马失去,请求过程就不再等候,而是持续施行下去。
在v$latch中的以次字段体现了Willing-to-wait请求:
GETS---成功地以Willing-to-wait请求门类请求一个latch的次数。
MISSES---初步以Willing-to-wait请求门类请求一个latch不成功的次数。
SLEEPS---初步以Willing-to-wait请求门类请求一个latch不成功后,历程等候获取latch的次数。
在v$latch中的以次字段体现了Immediate种请求:
IMMEDIATE_GETS---以Immediate请求部类成功地取得一个latch的次数。
IMMEDIATE_MISSES---以Immediate请求门类请求一个latch不成功的次数。
我们可以透过对v$latch, v$latchholder, v$latchname的查询取得相干latch信息,比如:
/* 已知一个latch地址,找出latch名字 */
col name for a40
select a.name from v$latchname a, v$latch b
where b.addr = '&addr'
and b.latch#=a.latch#;
/* 展示系统范围内的latch统计 */
column name format A32 truncate heading "LATCH NAME"
column pid heading "HOLDER PID"
select c.name,a.addr,a.gets,a.misses,a.sleeps,
a.immediate_gets,a.immediate_misses,b.pid
from v$latch a, v$latchholder b, v$latchname c
where a.addr = b.laddr(+)
and a.latch# = c.latch#
order by a.latch#;
/* 由latch姓名展示对latch的统计 */
select c.name,a.addr,a.gets,a.misses,a.sleeps,
a.immediate_gets,a.immediate_misses,b.pid
from v$latch a, v$latchholder b, v$latchname c
where a.addr = b.laddr(+) and a.latch# = c.latch#
and c.name like '&latch_name%' order by a.latch#;
latch有40余种,但作为DBA关怀的重要应有以次几种:
Cache buffers chains latch: 当用户历程搜寻SGA找寻database cache buffers时急需运用此latch。
Cache buffers LRU chain latch: 当用户历程要搜寻buffer cache中包括全部 dirty blocks的LRU (least recently used) 链时应用该种latch。
Redo log buffer latch: 这种latch统制redo log buffer中每条redo entries的空间分配。
Row cache objects latch: 当用户历程访问缓存的数据字典数值时,将运用Row cache objects latch。
停 面我们将着重引见一下子何以检测和减小redo log buffer latch的摩擦。对redo log buffer的访问是由redo log buffer latch来统制的,这种latch有两品种型, redo allocation latch和redo copy latch。
Redo allocation latch统制redo entries在redo log buffer中的空间分配。Oracle的一个用户过程唯有失去redo allocation latch后才情为redo entries在redo log buffer中分配空间,又因为一个instance惟独一个redo allocation latch,之所以一次唯有一个用户历程在buffer中分配空间。当用户过程取得latch后,第一为redo entry分配空间,其后历程持续握有latch并拷贝entry到buffer中,这种拷贝号称“在redo allocation latch上的拷贝”(copying on the redo allocation latch),拷贝完毕后,用户过程开释该latch。
一个“在redo allocation latch上的拷贝”的redo entry的最大值是由初始化参数LOG_SMALL_ENTRY_MAX_SIZE定义的,依据操作系统的不同而不同。
Redo Copy Latch只应用于多CPU的系统。在多CPU的instance中,如若一个redo entry太大,超过了LOG_SMALL_ENTRY_MAX_SIZE定义值,则不能开展“在redo allocation latch上的拷贝”, 此刻用户历程务必获取redo copy latch。一个instance中可以有多个redo copy latch,其数额由初步参数LOG_SIMULTANEOUS_COPIES决议,缺省值为CPU数额。
在单CPU情况下,不存在redo copy latch,全部的redo entry无论是大小, 都开展“在redo allocation latch上的拷贝”。
对redo log buffer的过剩访问将以致redo log buffer latch的摩擦,latch摩擦将减低系统性能,我们可通过如次查询来检测这种latch矛盾:
col name for a40
SELECT ln.name,gets,misses,immediate_gets,immediate_misses
FROM v$latch l,v$latchname ln
WHERE ln.name IN('redo allocation','redo copy') AND ln.latch#=l.latch#
/
若misses与gets的比值超过一%或immediate_misses与(immediate_gets+immediate_misses)比率超过一%时,应试虑采取措施减小latch的矛盾。
大 大部分的redo log buffer latch矛盾是在多个CPU情况下,两个或多个Oracle历程意欲与此同时失去雷同的latch发作的。因为一个instance惟独一个redo allocation latch,为减小redo allocation latch的摩擦,当减小单个历程握有latch的时间,这可以透过减少初步参数LOG_SMALL_ENTRY_MAX_SIZE以减少redo entry的数额和大小来兑现。如若观察到有redo copy latch摩擦,可以透过增大LOG_SIMULTANEOUS_COPIES 初步参数来加大latch数额,其缺省值为CPU数额,最大可增大到CPU数额的两倍。
本文来源:
我的异常网
Java Exception
Dotnet Exception
Oracle Exception
- Oracle Latch及latch矛盾
- Oracle Latch及latch冲突
- Latch及latch冲突
- Oracle Latch
- 2.latch之oracle latch
- Latch
- latch
- latch及latch冲突(chinaitlab)
- ORACLE parent latch和children latch
- 4.latch之oracle latch undo globaldata
- 应用Oracle latch分类
- Oracle LATCH学习
- ORACLE LATCH介绍
- oracle latch(转)
- Oracle Latch 说明
- Oracle Latch 说明
- Oracle-Latch events
- oracle latch (一)
- Oracle中统计契合某列条件的列总和
- ETL数据加载策略
- Oracle随机函数的用法
- 数据仓库之拉链算法(转)
- 数据仓库数据质量的问题探讨(转)
- Oracle Latch及latch矛盾
- Linux编程make命令介绍
- atumation --test
- http://blog.csdn.net/winneraqun/archive/2009/09/11/4542017.aspx
- 如何培养出优秀的产品经理?
- Windows7 64位软件安装手记
- 代码优化问题
- C89与C99的主要区别
- C++惯用排序法研究