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 争用

时间: 2025-01-02 03:03:25

Oracle中等待事件深入分析的相关文章

Oracle Mutex 等待事件

Oracle Mutex 等待事件之: cursor pin S pin S 等待事件说明,当一个会话(session)试图去更新一个共享的 Mutex Pin,同时已经有其他会话正在更新(updating)同一个 Shared Mutex Pin.注意,Pin S 的Mutex位于子游标上,是动态创建的,无法从等待事件中获得,但是可以在竞争出现的情况下,通过观察 x$mutex_sleep_history 来获得. 文档说明如下: Oracle Mutex 等待事件之: cursor pin

Oracle OWI 等待事件历史视图及相关视图

    Oracle提供的等待事件视图使得我们可以获取指定session以及实例级别等待事件的详细信息,这些视图分别是v$session_wait,v$session_event,以及v$system_event.然而这几个视图对于历史等待事件无能为力.对此,Oracle也提供了历史等待事件视图v$session_wait_history,同时视图v$session_wait_class,v$system_wait_class也提供了基于等待类别的性能分析,下面是基于Oracle 10g对此展开

Oracle的等待事件

转自http://www.kingsnet.biz/Article/database/oracle/200804/8694_5.html Oracle的等待事件是衡量Oracle运行状况的重要依据及指标.等待事件的概念是在Oracle7.0.1.2中引入的,大致有100个等待事件.在Oracle 8.0中这个数目增加到了大约150个,在Oracle8i中大约有200个事件,在Oracle9i中大约有360个等待事件.主要有两种类别的等待事件,即空闲(idle)等待事件和非空闲(non-idle)

防患未然:Oracle gc等待事件的发现、处理与预防

系统环境 两节点的RAC:AIX6.1+Oracle 11.2.0.3.3   AWR里展示出来的各种症状(数据来自实例2) 虽然应用没有报障,但AWR报告里的各种迹象已经很明显了   (1)   gc buffer busy acquire排进了Top 5 Timed Foreground Events   图-1   (2)   除去DB CPU在gc buffer busy acquire之后的就是gc cr block busy了   图-2   (3)   2h21bq1mnc5kd这

Oracle OWI 等待事件视图(v$session_wait/v$session_event/v$system_event)

    通常情况下,用户提交一条SQL语句,总会存在这样或那样的等待事件.也就是说由于所需资源被占用导致进程不得不处于等待状态.Oracle为我们提供了获取这些等待事件的可用视图.根据这些视图可以得知哪些事件导致该SQL语句效率低下而采取相应的修改或调整.本文基于Oracle 10g描述了如何通过视图v$session_wait,v$session_event,以及v$system_event去获取等待事件的相关信息.   1.等待事件相关参数  timed_statistics      指定

oracle 常见等待事件及处理方法_oracle

看书笔记db file scattered read DB ,db file sequential read DB,free buffer waits,log buffer space,log file switch,log file sync 我们可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息,从而可确定出产生瓶颈的类型及其对象.v$session_wait的p1.p2.p3告诉我们等待事件的具体含义,根据事件不同其内容也不相同,下面就一

oracle中Shared pool深入分析及性能调整

摘要:本文首先详细介绍了oracle中shared pool的概念以及所包含的内存结构.然后深入介绍了oracle对于shared pool的管理机制.最后全面介绍了有关buffer cache监控以及调优的实用方法. 1. shared pool的概念 oracle数据库作为一个管理数据的产品,必须能够认出用户所提交的管理命令(通常叫做SQL语句),从而进行响应.认出的过程叫做解析SQL语句的过程,响应的过程叫做执行SQL语句的过程.解析的过程是一个相当复杂的过程,它要考虑各种可能的异常情况,

Oracle中procedure/cursor深入分析

procedure概述 存储过程( Stored Procedure )是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中. 用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它. 存储过程是由流控制和 SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可. 在Oracle 中,若干个有联系的过程可以组合在一起构成程序包. procedure优点 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 S

索引在Oracle中的应用深入分析_oracle

索引是提高数据查询最有效的方法,也是最难全面掌握的技术,因为正确的索引可能使效率提高10000倍,而无效的索引可能是浪费了数据库空间,甚至大大降低查询性能. 一.索引的管理成本1. 存储索引的磁盘空间2. 执行数据修改操作(INSERT.UPDATE.DELETE)产生的索引维护3. 在数据处理时所需额外的回退空间. 二.实际数据修改测试:一个表有字段A.B.C,同时进行插入10000行记录测试在没有建索引时平均完成时间是2.9秒在对A字段建索引后平均完成时间是6.7秒在对A字段和B字段建索引后