,Oracle等待事件的种类包括:I/O, locks, latches, enqueues, background process activities, network latencies, memory,等。可以通过V$SYSTEM_WAIT_CLASS查询到。
Oracle Wait Interface
Oracle等待事件的种类包括:I/O, locks, latches, enqueues, background process activities, network latencies, memory,等。可以通过V$SYSTEM_WAIT_CLASS查询到。
使用之前必须设置TIMED_STATISTICS=TRUE.
OWI的关键组件
视图
。V$EVENT_NAME:包含定义的所有等待事件;
。V$SESSION_WAIT:显示每个会话当前正在等待的时间和资源的详细信息,这是一个实时视图;
在10G中,v$session_wait已经合并到了v$session 视图中,虽然仍包含v$session_wait.
。V$SESSION_EVENT:显示当前连接的会话的等待事件的聚集;
。V$SYSTEM_EVENT:显示所有会话遇到的所有等待事件的聚集;
Oracle 10G新增的关键组件包括:
V$SESTEM_WAIT_CLASS
V$SESSION_WAIT_CLASS
V$SESSION_WAIT_HISTORY
V$EVENT_HISTOGRAM
V$ACTIVE_SESSION_HISTORY
跟踪
。Trace event 10046—扩充的SQL跟踪;
。如果无法交互性的监控事件,可以通过纪录等待事件到跟踪文件进行诊断性能问题;
。可以在实例(Event=“10046 tace name contex forever, level 8”, 永远不要这么做)/会话级别(Alter session set events ‘10046 trace name context forever, level 8’)启用。
。运行要跟踪的SQL;
。Alter session set events ‘10046 trace name context off’;
???以下过程在可能没有。
。也可以使用dbms_support.start_trace进行跟踪;
。跟踪其他会话:Exec dbms_support.start_trace_in_session(sid=>xxx, serial#=>xxx, waits=>true, binds=>true);
。结束跟踪:stop_trace_in_session;
。跟踪文件的位置在user_dump_dest 目录下;
。可以使���tracefile_identifer命名跟踪文件名,Alter session set tracefile_identifier= ‘Tracefilesql1’;
。然后使用tkprof工具进行格式化输出,最近Metalink上有一个新的工具TRCA,更加适合分析跟踪文件。
OWI的限制
。没有CPU 统计;
。非端到端的可见性;
。没有历史数据;
。由于当前计算机速度的飞增,一些计算可能不精确;
常见的等待事件
。Buffer busy waits:10g中更改为read by other session;参数中P1代表块所在的文件号,P2代表实际的块号,P3在9i中代表reason for the wait,10g中代表v$waitstat中的CLASS列;等待时间为1s或100cs.
。Control file parallel write:参数中P1代表块驻留的绝对文件号,P2代表总块数,P3代表I/O请求数量;等待时间为完成所有I/O请求的实际延迟。
。Db file parallel read:当一个进程从一个/多个数据文件读取多个不连续的块,或数据库恢复时有些数据库块需要恢复时会发生这种事件;参数P1代表需要读取的文件数,P2读取的总块数,P3代表I/O请求的总数量;等待时间为完成所有I/O请求的实际延迟。
。Db file parallel write:当DBWR以批模式些藏块到数据文件时会发生;参数中P1代表需要写入的文件数,P2代表要写的总块数,P3(9.2+)以百分之一秒为单位代表超时的值;等待时间:无超时。
。Db file scattered read:通常在全表扫描时发生;参数P1代表开始读取的块的文件号,P2代表开始读取的块号,P3代表读取的块数;等待时间:无超时。
。Db file sequential read:当从索引,回滚段,表(ROWID),数据文件头,一些临时段读取时会发生该事件;参数P1代表开始读取的块的文件号,P2代表开始读取的块号,P3通常为1,但是临时段则大于1;等待时间:无超时。
。Db file single write:当Oracle更新数据文件头时发生该事件,通常在检查点期间。如��数据库有大量数据文件可能会注意到这种情况;参数P1代表写入的文件号,P2代表开始写入的块,P3通常为1;等待时间:无超时。
。Direct path read:当oracle直接读取数据库块到会话PGA而不是SGA的缓冲缓存时时发生,直接路径读取通常在访问临时段时使用;参数P1读取的所在的绝对文件号,P2代表开始读取的块号,P3则为读取的块数;等待时间:无超时。
。Direct path write:与Direct path read相反,Oracle从PGA写缓冲到数据文件,通常用来写到临时段,直接数据加载或并行DML操作。
。Enqueue:是一种Oracle用来串行化访问数据库资源的共享内存结构,进程为了得到该enqueue锁必须等待在队列中。用来串行访问资源的各种enqueue包括:ST,空间管理;SQ,序列号;TX,事务;参数P1代表正在等待的进程请求的enqueue名和模式,P2代表请求的锁的资源标识符ID1,P3代表请求的锁的资源标识符ID2;等待时间:依赖于enqueue名,Oracle最多可以等待三秒,或直到enqueue资源可用。
。Free buffer waits:当会话无法在数据库缓冲缓存中找到空闲缓冲读入块或者建立一致性读时将发生该事件。这会唤醒DBWR释放脏缓冲;参数中P1代表文件号,P2代表需要读入到缓存中的块号,P3(9i未使用),10G显示缓冲缓存中LRU列表的id;等待时间:Oracle最多等待1s,然后重试。
。Latch free:当进程等待一个当前被其他进程占用的latch时会发生这种事件。进程要得到latch不必等待在队列中。最常见的latch包括:cache buffer chains, library cache和shared pool;参数P1代表latch的地址,P2代表latch号(v$latchname.latch#),P3代表尝试的次数;等待时间:指数增长,10G中latch由其自身的等待事件。