Oracle latch free 等待事件 说明

2024-04-04 02:48

本文主要是介绍Oracle latch free 等待事件 说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

.  Latch 说明

有关Latch,在我之前的Blog里也有一些说明:

       死锁 阻塞 Latch 等待 详解

       http://blog.csdn.net/tianlesoftware/archive/2010/08/20/5822674.aspx

 

       Latch是一种轻量级的锁,是一种低级排队(串行)机制。一般来说,latch由三种内存元素组成:pid(进程id),内存地址和内存长度。

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

 

最常见的Latch集中于Buffer Cache的竞争和Shared Pool的竞争:

       1)和Buffer Cache相关的主要Latch竞争有cache buffers chainscache buffers lru chain. Buffer CacheLatch竞争经常是由于热点块竞争引起;

       2)和Shared Pool相关的主要Latch竞争有Shared Pool LatchLibrary Cache Latch等。 Shared PoolLatch竞争通常是由于SQL的硬解析引起。

 

       oracle9i(包括9i)之前,latch free等待事件包括了所有的latch等待,但从oracle10g起,latch被分成不同的种类,并且某些latch表现为独立的等待事件。

 

 

.  Latch Free

 

2.1  Latch的获取   

       如果请求latch时,该latch不可用,进程就会在cpu中等待一小段时间(spin)然后重新请求latch。如果latch一直不可用,该过程(spin一段时间然后重新请求)会一直重复。重复的次数由隐含参数_spin_count决定,默认值2000。如果在请求_spin_count次之内获得了latch,就对spin_getsmisses列各加一,否则,进程在v$session_wait中记录latch free等待事件,然后释放cpu,转入睡眠状态。睡眠一定时间后,进程被唤醒并重复上面的过程,一直到获得latch在成功获得latch后,才会更行sleep列得统计信息。

 

       当一个进程请求latch失败一定次数后,它会请求pmon进程查看该latch的持有者,如果持有进程异常,pmon就会清理该进程,释放latch

 

2.2  Latch 争用

       进程在spin的过程中,会一直持有CPUspin的机制是假设Latch可以被快速释放(正常情况下,Latch的持有时间是微秒级,相对spin机制如果直接采用Sleep方式引起的上下文切换会相当昂贵,所以Oracle针对Latch引入了spin算法),如果其他CPU上的其他进程释放了LatchSPIN进程就可以立即获得这个Latch。如果系统只有单CPU,那就谈不上SPIN了。另一方面也可以看到,Latch竞争是非常昂贵的,可能导致严重的CPU耗用,所以Latch竞争在任何时候都应该引起充分的重视。经过spin后成功获得Latch的次数被记录在v$latch.spin_gets字段

 

       如果我们在v$session_wait中发现有latch free等待事件,就意味着,进程在请求一个willing_to_wait模式的latch,在重试了_spin_count (默认为2000) 后还是没有获得latch,然后转入睡眠状态了。如果latch争用严重,将会由于不断的spin导致cpu资源紧张,从而增加系统响应时间。

 

       V$system_event视图的total_waits列记录了进程获取willing-to-wait模式latch失败的次数V$latchsleeps列记录了进程由于等待某个latch而进入睡眠状态的次数。由于一个进程在_spin_count次尝试请求latch失败后会转入睡眠状态,total_waits列应该等于sleeps列的值的和。 但是,某些时候,total_waits会比sleeps的和要大,这是因为,只有在进程获得latch后才会更新total_waits的值,而不是每次请求latch失败就更新。

 

       The latch free Oracle metric occurs when the process is waiting for a latch held by another process (this wait event does not apply to processes that are spinning while waiting for a latch; when a process is spinning, it is not waiting).

 

如下blog上对Latch 有一些测试说明:

       Latch Free

       http://www.dbtan.com/2010/05/latch-free.html

 

 

 

 

-------------------------------------------------------------------------------------------------------

QQ:492913789

Email:ahdba@qq.com

Blog: http://www.cndba.cn/dave


DBA1 群:62697716();   DBA2 群:62697977()   DBA3 群:62697850()  

DBA 超级群:63306533();  DBA4 群: 83829929  DBA5群: 142216823   

DBA6 群:158654907  聊天 群:40132017   聊天2群:69087192

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

这篇关于Oracle latch free 等待事件 说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/874616

相关文章

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

spring @EventListener 事件与监听的示例详解

《spring@EventListener事件与监听的示例详解》本文介绍了自定义Spring事件和监听器的方法,包括如何发布事件、监听事件以及如何处理异步事件,通过示例代码和日志,展示了事件的顺序... 目录1、自定义Application Event2、自定义监听3、测试4、源代码5、其他5.1 顺序执行