一、等待事件发展
oracle等待事件引入,可以更加细粒度直观地观察Oracle行为,提供oracle优化入口,大致分为三个阶段:
- 以命中为主要参考指标:以各种命中率为主要的优化入口依据,常见的有”library cache hit radio“等,该方式具有一定的局限性,命中率高性能不一定好。
- 以等待事件为主要参考指标:以各种等待事件为优化入口依据,比如“db_scattered_read”,可以较为明确地提供一段时间内,什么等待事件,导致现在的优化瓶颈出现。
- 以时间模型为主要参考指标:以各种资源消耗为优化入口依据。整体地了解数据库在一段时间内的消耗情况。较等待事件方式,有更强的概括性。比如 db time;
二、等待事件分类
大致上分为空闲等待及非空闲等待事件,而非空闲等待事件可以继续更细致的划分:
select distinct(wait_class),count(*),event from v$session_wait group by wait_class,event;
如上表示,WAIT_CLASS为 Idle表示空闲等待,其它的都是非空闲等待。
1、区分空闲等待与非空闲等待
- 空闲等待事件:是指oracle正在等待某种工作,比如‘SQL*Net message from client’ 表示一个登录sqlplus的会话,当前正在空闲。诊断时一般不过多关注该类事件。
- 非空闲等待事件:专门针对ORACLE的活动,指数据库任务和应用运行过程中发生的等待,这些等待事件是调整数据库时应该关注和研究的。
2、等待事件分类说明
-- 查看等待事件分类情况: SELECT WAIT_CLASS#,WAIT_CLASS_ID, WAIT_CLASS, COUNT(*) "COUNT" FROM V$EVENT_NAME GROUP BY WAIT_CLASS#, WAIT_CLASS_ID, WAIT_CLASS ORDER BY WAIT_CLASS#;
- 管理类Administrative:此类等待事件是由于DBA的管理命令引起的,这些命令要求用户处于等待状态(比如重建索引等)。
- 应用程序类-Application:此类等待事件是由于用户应用程序代码所引起(比如锁)。
- 集群类(cluster):此类等待事件和真正应用群集RAC的资源有关(比如,gc cr block busy等待事件)。
- 提交确认类-Commit:此类等待事件只包含一种等待事件----在执行一个commit命令之后,等待一个重做日志写确认(也就是 log file sync)
- 并发类Concurrency:此类等待事件是内部数据库资源引起的(比如闩锁)
- 配置类Configuration:此类等待事件是由数据库或者实例配置不当导致的(比如,重做日志文件尺寸太小,共享池的大小等)
- 空闲类-Idle:此类等待事件意味着会话不活跃,等待工作比如‘SQL*Net message from client’
- 网络类-NetWork:和网络相关的一些等待事件比如sql* net more data to dblink) 。
- 其它类-Other:此类等待事件通常比较少见(比如wait for EMON to spawn)
- 调度类-Scheduler:此类等待事件和资源管理相关(比如resmgr: become active)
- 系统I/O类-System I/O:此类等待事件是由后台进程I/O操作引起的(比如DBWR等待-db file paralle write)
- 用户I/O类-User I/O:此类等待事件通常由用户I/O操作引起的(比如db file sequential read)
三、理解等待事件
- 每一个等待事件,都表明数据库的一种活动状态;
- 视图V$EVENT_NAME可以方便去了解每个等待事件,以及与等待事件相对应的资源的相关信息;
- 可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息