Oracle-等待事件解读

简介: Oracle-等待事件解读

等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件。


1). 空闲等待事件


ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件。


2). 非空闲等待事件


专门针对 ORACLE 的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件是在调整数据库的时候需要关注与研究的。


在 Oracle 10g 中的等待事件可以通过 v$event_name 视图来查看等待事件的相关信息。


常见等待事件


Buffer busy waits


从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个 Buffer(数据块),但是导致这个现象的原因却有很多种。


常见的两种是:

当一个会话视图修改一个数据块,但这个数据块正在被另一个会话修改时

当一个会话需要读取一个数据块,但这个数据块正在被另一个会话读取到内存中时。


Oracle 操作的最小单位是块( Block),即使你要修改一条记录,也需要对这条记录所在的这个数据块做操作。


当一个会话修改一个数据块时,是按照以下步骤来完成的:

( 1) 以排他的方式获得这个数据块( Latch)

( 2) 修改这个数据块。

( 3) 释放 Latch。


Buffer latch


内存中数据块的存放位置是记录在一个 hash 列表( cache buffer chains)当中的。


当一个会话需要访问某个数据块时,它首先要搜索这个 hash 列表,从列表中获得数据块的地址,然后通过这个地址去访问需要的数据块,这个列表 Oracle会使用一个 latch 来保护它的完整性。


当一个会话需要访问这个列表时,需要获取一个 Latch,只有这样,才能保证这个列表在这个会话的浏览当中不会发生变化。


产生 buffer latch 的等待事件的主要原因是:


( 1) Buffer chains 太长,导致会话搜索这个列表花费的时间太长,使其他的会话处于等待状态。

( 2) 同样的数据块被频繁访问,就是我们通常说的热快问题。


Control file parallel write


控制文件频繁写入的原因很多,比如:

( 1) 日志切换太过频繁,导致控制文件信息相应地需要频繁更新。

( 2) 系统 I/O 出现瓶颈,导致所有 I/O 出现等待。


当系统出现日志切换过于频繁的情形时,可以考虑适当地增大日志文件的大小来降低日志切换频率。


当系统出现大量的 control file parallel write 等待事件时,可以通过比如降低控制文件的拷贝数量,将控制文件的拷贝存放在不同的物理磁盘上的方式来缓解I/O 争用。


等等…….


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
SQL 监控 Oracle
Oracle 数据库发生等待事件:enq: TX - row lock contention ,排查思路
Oracle 数据库发生等待事件:enq: TX - row lock contention ,排查思路
Oracle 数据库发生等待事件:enq: TX - row lock contention ,排查思路
|
11月前
|
Oracle 前端开发 Java
Oracle优化11-10046事件
Oracle优化11-10046事件
52 0
|
11月前
|
SQL Oracle 关系型数据库
Oracle优化12-10053事件
Oracle优化12-10053事件
57 0
|
SQL Oracle 关系型数据库
Oracle 等待事件研究:SQL*Net break/reset to client
SQL*Net break/reset to client事件是一个容易被误解的事件,这个事件看起来和网络有关,但实际上大多数情况下这个事件与网络无关。
396 0
Oracle 等待事件研究:SQL*Net break/reset to client
|
SQL 存储 监控
Oracle中的SQL_TRACE是什么?诊断事件是什么?常用的10046及10053诊断事件的区别是什么?
Oracle中的SQL_TRACE是什么?诊断事件是什么?常用的10046及10053诊断事件的区别是什么?
414 0
|
Oracle 关系型数据库 数据库
❤️Oracle TOP5事件解读,性能优化必备技能❤️
❤️Oracle TOP5事件解读,性能优化必备技能❤️
251 0
❤️Oracle TOP5事件解读,性能优化必备技能❤️