`

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

 
阅读更多

 

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> select x.ksppinm name, y.ksppstvl value, x.ksppdesc describ
  2  from sys.x$ksppi x , sys.x$ksppcv y
  3  where x.indx = y.indx
  4  and x.ksppinm like '%&par%'
  5  /
Enter value for par: kks
old   4: and x.ksppinm like '%&par%'
new   4: and x.ksppinm like '%kks%'
NAME                      VALUE           DESCRIB
------------------------- --------------- --------------------------------------------------------
_kks_use_mutex_pin        FALSE           Turning on this will make KKS use mutex for cursor pins.

这意味着新的Mutex机制已经准备好了用于应付Cursor Pin处理。在Oracle 10gR2/11gR1随后的版本中,这个参数被设置为Ture:

sys@CCDB> select * from v$version where rownum < 2;
BANNER
----------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
sys@CCDB> @GetHidPar.sql
Enter value for par: mutex
old   4: AND x.ksppinm LIKE '%&par%'
new   4: AND x.ksppinm LIKE '%mutex%'
NAME                           VALUE                DESCRIB
------------------------------ -------------------- --------------------------------------------------------
_kks_use_mutex_pin             TRUE                 Turning on this will make KKS use mutex for cursor pins.

Mutex机制首先被引入用于替代Library Cache Latch以及Library Cache Pin等机制。使用Mutex Pin机制Oracle能够使用更少的CPU资源获得更好的性能。由于Mutex Pin机制带来的Cursor管理上性能提升,所以曾经用来缓解Cursor Latch竞争的参数CURSOR_SPACE_FOR_TIME从Oracle 10.2.0.5和Oracle 11.1.0.7开始将不再被支持。

在Oracle 11.1.0.6中,以下是数据库中Library Cache相关的Latch与等待:

sys@CCDB> select * from v$version where rownum < 2;
BANNER
----------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
sys@CCDB> select name from v$latch where name like '%library%';
NAME
------------------------------
library cache load lock
sys@CCDB> select name from v$event_name where name like '%library%';
NAME
------------------------------
library cache pin
library cache lock
library cache load lock
library cache: mutex X
library cache: mutex S
OSD IPC library
library cache revalidation
library cache shutdown
8 rows selected.

在Oracle Database 11g中,和Mutex相关的数据库描述已经被引入,首先的变化是和Library Cache相关的Latch仅余library cache load lock:

sys@CCDB> select * from v$version where rownum < 2;
BANNER
----------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
sys@CCDB> select name from v$latch where name like '%library%';
NAME
------------------------------
library cache load lock

其次是等待事件引入了Library Cache:Mutex S/X等待,用以描述因为Mutex竞争而导致的Library Cache等待:

sys@CCDB> select name from v$event_name where name like '%library%';
NAME
------------------------------
library cache pin
library cache lock
library cache load lock
library cache: mutex X
library cache: mutex S
OSD IPC library
library cache revalidation
library cache shutdown
8 rows selected.

虽然在Oracle Database 11gR1中,这些变化已经可以清晰地看到,但是一些问题仍然存在,Oracle仍然在通过一系列不断努力和改进使得这些新的变化走向成熟。

当然Library Cache Latch在某些条件下仍然会被用到,Oracle数据库的很多内容还在不断变化中。关于Mutex的信息主要可以通过两个视图来查询:v$mutex_sleep和v$mutex_sleep_history。以下是一个Oracle 11g生产环境中的查询示范输出:

sys@CCDB> select SLEEP_TIMESTAMP,MUTEX_TYPE,GETS,SLEEPS,LOCATION,MUTEX_VALUE
  2  from v$mutex_sleep_history where rownum <10;
SLEEP_TIMESTAMP                MUTEX_TYPE            GETS     SLEEPS LOCATION             MUTEX_VALUE
------------------------------ --------------- ---------- ---------- -------------------- ----------------
11-MAY-10 08.46.15.176426 PM   Cursor Pin        20439381         80 kksfbc [KKSCHLPIN1]  00
13-MAY-10 04.01.19.066757 PM   Library Cache        39098     113171 kglhdgn1  62         0000021E00000000
13-MAY-10 04.50.40.279082 PM   Library Cache       172560    1384786 kgllkdl1  85         00
06-MAY-10 09.34.57.393852 PM   Library Cache        76718         43 kgllkdl1  85         000001CC00000000
06-MAY-10 10.24.47.734523 PM   Library Cache       103771     383024 kglhdgn1  62         0000031B00000000
13-MAY-10 04.50.40.328295 PM   Library Cache       150176      46662 kgllkdl1  85         000001C200000000
13-MAY-10 04.50.40.291834 PM   Library Cache       208155         45 kgllkdl1  85         00
09-MAY-10 01.00.03.163520 AM   Library Cache          155          1 kglhdgn1  62         00
07-MAY-10 03.33.35.071512 PM   Library Cache         2933          5 kgllkdl1  85         0000029700000000
9 rows selected.

- The End -

参考至:http://www.dbtan.com/2010/05/oracle-10g11g-latch.html
如有错误,欢迎指正
邮箱:czmcj@163.com

分享到:
评论

相关推荐

    让Oracle跑得更快—Oracle 10g性能分析与优化思路ch03.pdf

    ### Oracle 10g性能分析与优化:深入理解Latch及其优化策略 #### 一、Latch与Lock的区别 在Oracle数据库的性能优化过程中,理解和区分Latch与Lock是非常重要的。两者虽然都涉及资源的控制和访问,但其作用机制和对...

    Oracle性能诊断之——Latch free

    自Oracle 10g起,为了更精细地管理和诊断并发问题,传统的"Latch Free"事件被细分为针对SGA各部分的具体子Latch事件。例如,针对Buffer Cache的`cache buffer chains latch`和`cache buffer lru latch`,Shared Pool...

    Oracle中的Latch和Lock.pdf

    Oracle数据库是一种广泛使用的大型关系型数据库管理系统,它在处理并发事务时采用了一种称为“Latch”和“Lock”的并发控制机制。Latch(闩锁)和Lock(锁定)都是Oracle用来确保数据一致性、防止数据冲突的关键组件...

    性能优化篇之Oracle10g_性能分析及优化思路

    4. **Latch等待**: latch是Oracle内部的一种同步机制,过多的latch等待可能表明并发控制问题。 三、优化策略 1. **索引优化**:合理创建和使用索引可以大幅提升查询速度,但过多的索引会增加写操作的开销,需权衡...

    oracle Latch free等待事件

    Oracle数据库中的"Latch Free"等待事件是数据库性能优化的一个重要概念。在深入探讨这个主题之前,我们先要理解什么是Latch和Lock,以及它们之间的区别。 Latch(锁片或轻量级锁)是一种低级别的同步机制,主要用于...

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part2.rar

    8.2 并行处理的机制 189 8.3 读懂一个并行处理的执行计划 191 8.4 一个很常见的并行执行等待事件 192 8.5 并行执行的适用范围 194 8.5.1 并行查询 194 8.5.2 并行ddl操作 195 8.5.3 并行dml操作 203 8.6 并行执行的...

    学习动态性能表(11)--v$latch$v$latch_children

    【学习动态性能表(11)--v$latch$v$latch_children】主要关注Oracle数据库中的动态性能视图,尤其是关于latch这一关键概念的监控和分析。latch是一种轻量级的锁定机制,用于保护SGA(System Global Area)中的共享...

    Oracle.10g性能分析与优化思路

    本主题聚焦于"Oracle.10g性能分析与优化思路",旨在深入探讨如何通过一系列技术手段和策略让Oracle数据库运行得更加流畅、快速。 一、SQL优化 1. SQL执行计划分析:了解SQL语句的执行过程,利用 Explain Plan 工具...

    oracle 10g优化

    ### Oracle 10g 优化知识点详解 #### 一、Oracle 10g 性能调整与优化概览 在企业级应用环境中,Oracle 数据库的性能直接影响到系统的响应速度和稳定性。Oracle 10g 版本作为一款成熟且广泛应用的企业级数据库管理...

    Resolving_Oracle_Latch_Contention.rar_latch contention_oracle

    在Oracle数据库系统中,"Latch Contention"是一个关键性能问题,它涉及到多个进程或线程在尝试获取同一资源锁(Latch)时的竞争。这通常会导致系统性能下降,因为当一个进程等待另一个进程释放Latch时,数据库操作...

    Oracle Database 11g Performance Tuning Recipes 英文版

    《Oracle Database 11g Performance Tuning Recipes》是一本专注于Oracle数据库11g性能优化的专业书籍,由国外的专家编写,旨在帮助读者深入理解和实践Oracle数据库的性能调优技术。这本书以其清晰的结构和易读性...

    Oracle 11G Performance Tuning - sg2

    ### Oracle 11G Performance Tuning - sg2 #### 标题解读: “Oracle 11G Performance Tuning - sg2” 这个标题明确指出了文档的主要内容是关于 Oracle Database 11g 的性能调优。其中,“sg2”可能是指该文档属于...

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part1.rar

    8.2 并行处理的机制 189 8.3 读懂一个并行处理的执行计划 191 8.4 一个很常见的并行执行等待事件 192 8.5 并行执行的适用范围 194 8.5.1 并行查询 194 8.5.2 并行ddl操作 195 8.5.3 并行dml操作 203 8.6 并行执行的...

    oracle Library cache latch 竞争的解决

    ### Oracle Library Cache Latch 竞争的解决 在Oracle数据库中,`Library Cache Latch`竞争是一个常见的性能瓶颈问题,通常会导致系统响应时间增加、性能下降等问题。本篇文章将详细探讨如何诊断并解决该问题。 ##...

    oracle_latch

    Oracle Latch 是数据库管理系统Oracle中的一个重要概念,它是一种同步机制,用于控制对共享资源的并发访问。在Oracle中,Latches被广泛应用于保护各种数据库结构,确保数据的一致性和完整性。Oracle Latch 在多线程...

    Oracle等待事件latch解析

    Latch是Oracle数据库中一种重要的低级别内存保护机制,主要用于确保对内存结构的并发访问能够有序地进行。它是一种较为简单的内存结构,其大小大约在100-200字节之间,具体取决于Oracle版本以及运行平台的不同。自...

Global site tag (gtag.js) - Google Analytics