Latch free
等待事件
Latch free
等待事件的三个参数:
p1
-
latch
的地址;
p2
-
latch
编号;
p3
-请求次数。
从
oracle10g
起,
latch free
不再包含所有的
latch
等待,有些
latch
等待可能表现为单独的
等待事件,这个后面有提到一些这样的等待事件,一般情况下我们还是统称为
latch free
等
待事件。在处理
latch free
等待事件时,需要注意以下几点:
Latch
只是用来保护
sga
中的内存结构。对数据库中的对象的保护,使用的
lock
而不
是
latch
。
Oracle sga
中有许多
latch
,用来保护
sga
中各种内存结构不会因为并发访
问而损坏。
等待
latch
的是
oracle
会话。不同的
latch
类型会导致会话采取不同的策略。
在
oracle9i
(包括
9i
)之前,
latch free
等待事件包 括了所有的
latch
等待,但 从
oracle10g
起,
latch
被分成不同的种类,并且某些
latch
表现为独立的等待事件。
什么是
latch
Latch
是一种锁机制。你应该已经熟悉
latch
的概念和用法,虽然可能你自己并没有意
识到。在日常的工作和交流中,
latch
都经常出现,比如你锁门时,需要获得一个
latch
;或
者你坐到车里,系上安全带,你就把自己放在一个
latch
的保护中了。
在
oracle
中,
latch
是一种轻量级的锁。一般来说,
latch
由三种内存元素组成:
pid
(进
程
id
),内存地址和内存长度。
Latch
保证对共享数据结构的排它性访问,以此来保证内存
结构的完整性不受到损坏。在多个会话同时修改或者检视
(inspect)sga
中同一个内存结构时,
必须串行化访问以保证
sga
中数据结构的完整性。
Latch
和
lock
的异同
Latch
和
lock
有许多不同之处。下表列出了
latch
和
lock
之间的比较结果。
Latch Lock
目的 只有一个目的:保证对内存结构的排他性
访问(从
oracle9i
开始,
cache buffers chain
latch
可以允许只读共享访问)
两个目的:如果锁模式是兼容的,允
许多个进程共享相同的资源;如果锁
模型是不兼容的,保证对共享资源的
排它性访问。
适用场景 只能应用于
sga
中的数据结构,保护内存对
象。
Latch
只影响单次操作,而和事务无
关。
保护数据库对象,诸如表,数据块和
状态对象等。由应用程序驱动,控制
对 数 据 库 中 数 据 和 元 数 据 的 访
问。
Lock
是事务性的。
获取方式 两种模式:
willing-to-wait
和
no-wait
六 种 模 式 :
null, row share, row
exclusive, share, share row exclusive
和
exclusive
范围 信息都保存在内存中,并且只在本实例可
见――
latch
是实例级别的
信息保存在数据库中,并且该数据库
的所有实例都可见――
lock
是数据库
级的
复杂度 使 用 简 单 机 器 指 令 比 如 :
test-and-set,
compare-and-swap
或其他简单的
cpu
指令实
现。由于
cpu
指令平台相关,所以
latch
在
不同的平台的具体实现不一样。轻量级
的。
需要上下文切换(
context siwtch
),
使用一系列指令实现。
重量级的。
评论