关闭
侧边栏

Oracle 10g/11g Latch机制的变化

Posted by dbtan on 五月 13th, 2010

Oracle 10g/11g Latch机制的变化:
前面曾经提到,Oracle的Latch机制采用spin来进行持有CPU的不断尝试,虽然通常Latch的获取会非常快(一般在微秒级),但是很多时候Latch竞争还是会引发极为严重的CPU争用。所以从Oracle 10g开始,Oracle尝试引入一种新的机制来代替传统的Latch机制,这就是Mutex机制,也就是互斥机制。和Latch相比,一个Mutex Get大约仅需要30~35个指令,而Latch Get则需要大约150~200个指令,同时在大小上,每个Mutex仅占大约16Bytes空间,而Latch在10gR2中要占用大约112Bytes空间。

在Oracle 10.2..0.1中一个新的参数_kks_use_mutex_pin被引入,不过缺省值为False:

sys@TQGZS> sel
... ...
<阅读全文>

Latch Free(闩锁释放)

Posted by dbtan on 五月 13th, 2010

Latch Free(闩锁释放):
Latch Free通常被称为闩锁释放,这个名称常常引起误解,实际上我们应该在前面加上一个“等待”(wait),当数据库出现这个等待时,说明有进程正在等待某个Latch被释放,也就是waiting latch free。

Latch是一种低级排队(串行)机制,用于保护SGA中共享内存结构。Latch就像是一种快速被获取和释放的内存锁,用于防止共享内存结构被多个用户同时访问。其实不必把Latch想得过于复杂,Latch通常就是操作系统利用内存中的某个区域,通过设置变量为0或非0,来表示Latch是否已经被取得,大多数操作系统,是使用TEST AND SET的方式来完成Latch检查或持有的。

为了快速地获得一个直
... ...
<阅读全文>

Enqueue (队列等待)

Posted by dbtan on 五月 13th, 2010

Enqueue (队列等待):
Enqueue是一种保护共享资源的锁定机制。该锁定机制保护共享资源,以避免因并发操作而损坏数据,比如通过锁定保护一行记录,避免多个用户同时更新。Enqueue采用排队机制,即FIFO(先进先出)来控制资源的使用。

在Oracle 10g之前,Enqueue事件是一组锁定事件的集合,如果数据库中这个等待事件比较显著,我们还需要进一步来追踪是哪个类别的锁定引发了数据库等待。

从Oracle 10g开始,Oracle对于队列等待进行了细分,v$event_name视图中可以查询这些细分后的等待事件,简要摘录几个示例如下:

sys@CCDB> select name,wait_class
  2  from v$event_name&n
... ...
<阅读全文>

日志文件相关等待

Posted by dbtan on 五月 13th, 2010

日志文件相关等待:
redo对于数据库来说非常重要,有一系统等待事件和日志相关,通过v$event_name视图可以找到这些等待事件:

sys@CCDB> select name from v$event_name where name like '%log%';
NAME
--------------------------------------------------
logout restrictor
LNS ASYNC archive log
LNS ASYNC end of log
log file sequential read
log file single write
log file parallel write
log buffer space
log file switch (checkpoint incomplete)
log file switch (private strand flush incomplete)
log file switch (archiving need
... ...
<阅读全文>

direct path read/write (直接路径读/写)

Posted by dbtan on 四月 12th, 2010

direct path read/write (直接路径读/写):

直接路径读(direct path read)通常发生在Oracle直接读数据到进程PGA时,这个读取不需要经过SGA。直接路径读等待事件的3个参数分别是file number(指绝对文件号)、first dba、block cnt数量。在Oracle 10g/11g中,这个等待事件被归于User I/O一类。

db file sequential read、db file scattered read、direct path read是常见的集中数据读方式,下图简要描述了这3种方式的读取示意。

D<br>... ...<br><a href='https://www.dbtan.com/2010/04/direct-path-readwrite.html' rel=<阅读全文>


Copyright © 2009 - 2018 https://www.dbtan.com. All rights reserved.    京ICP备13006977号-1