9i和10g中的log file相关的等待事件
版本9.2.0.8
SQL> select a.EVENT#,
2 a.NAME name,
3 a.PARAMETER1 p1,
4 a.PARAMETER2 p2,
5 a.PARAMETER3 p3
6 from v$event_name a
7 where a.NAME like '%log%file%' or a.name ='log buffer space';
EVENT# NAME P1 P2 P3
---------- ---------------------------------------- --------------- --------------- ---------------
195 log file sequential read log# block# blocks
196 log file single write log# block# blocks
197 log file parallel write files blocks requests
199 log buffer space
200 log file switch (checkpoint incomplete)
201 log file switch (archiving needed)
202 log file switch (clearing log file)
203 switch logfile command
204 log file switch completion
205 log file sync buffer#
10 rows selected.
SQL>
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
PL/SQL Release 9.2.0.8.0 - Production
CORE 9.2.0.8.0 Production
TNS for IBM/AIX RISC System/6000: Version 9.2.0.8.0 - Production
NLSRTL Version 9.2.0.8.0 - Production
SQL>
版本10.2.0.4
SQL> select a.EVENT#,
2 a.NAME name,
3 a.PARAMETER1 p1,
4 a.PARAMETER2 p2,
5 a.PARAMETER3 p3
6 from v$event_name a
7 where a.NAME like '%log%file%' or a.name ='log buffer space';
EVENT# NAME P1 P2 P3
---------- -------------------------------------------------- --------------- --------------- ---------------
104 log file sequential read log# block# blocks
105 log file single write log# block# blocks
106 log file parallel write files blocks requests
109 log buffer space
110 log file switch (checkpoint incomplete)
111 log file switch (private strand flush incomplete)
112 log file switch (archiving needed)
113 switch logfile command
114 log file switch completion
115 log file sync buffer#
491 log file switch (clearing log file)
11 rows selected.
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
5 rows selected.
SQL>
log file sequential read
当进程等待从online redo log中读取块时发生,arch进程在读取redo log的时候会遇到这个等待。
参数:
P1: redo log group内的redo log file的相对序列号
P2: 读取的起始块号
P3: 块数(OS块数)
大致看看具体情况,归档过程前后的total_waits的增长。
SQL> set serveroutput on;
SQL>
SQL> declare
2 v_total_waits v$system_event.TOTAL_WAITS%type;
3 v_TIME_WAITED v$system_event.TIME_WAITED%type;
4 v_WAIT_CLASS v$system_event.WAIT_CLASS%type;
5 begin
6 select a.TOTAL_WAITS,a.TIME_WAITED,a.WAIT_CLASS into
7 v_total_waits,v_TIME_WAITED,v_WAIT_CLASS
8 from v$system_event a where a.EVENT = 'log file sequential read' ;
9 dbms_output.put_line(v_total_waits||','||v_TIME_WAITED||','||v_WAIT_CLASS);
10 execute immediate 'alter system switch logfile';
11 select a.TOTAL_WAITS,a.TIME_WAITED,a.WAIT_CLASS into
12 v_total_waits,v_TIME_WAITED,v_WAIT_CLASS
13 from v$system_event a where a.EVENT = 'log file sequential read' ;
14 dbms_output.put_line(v_total_waits||','||v_TIME_WAITED||','||v_WAIT_CLASS);
15 end;
16 /
15401,11132,System I/O
15403,11132,System I/O
PL/SQL procedure successfully completed
SQL>
log file single write
等待写logfile写完成,在更新logfile头部时发生,在增加一个log file 成员的时候增加序列号时发生。
等待时间:物理io完成时间计时
P1: session当前写的日志(组)号
P2: block号
P3: 写的blocks数
log file parallel write
当session等待LGWR进程从redo buffer中写redo到所有redo log 组的成员中时发生,一般由LGWR发出。只有当使用异步IO的时候,LGWR写active log file member使用parallel,否则将顺序写每个redo log file member。
通常,这个事件意味着缓慢的磁盘,或者redo logs所在磁盘存在io竞争
(LGWR写入时机:
每三秒写入一次
在提交或者回滚时写入
在满足_LOG_IO_SIZE阀值时
在日志缓冲区有1m的redo时
dbwr提交时)
参数:
P1: 写的log file 序列号
P2: os的blocks数
P3: io请求的数量
log buffer space
session等待可用的log buffer 空间时发生。LGWR进程周期性的将log buffer写入redo log file,以清空log buffer,这个等待意味着应用产生了大量的redo,而LGWR来不及写日redo files,当然这个大量的只是相对来说的,要么是因为log buffer太小,要么是因为redo log file所在磁盘有io竞争。
这个等待时间没有p1,p2,p3参数
-- 会话级统计必须等待日志缓冲区的次数。
SELECT s.SID , s.VALUE
FROM v$sesstat s
WHERE s.statistic# =
(SELECT t.statistic#
FROM v$statname t
WHERE t.NAME = 'redo buffer allocation retries')
;
-- 系统级统计必须等待日志缓冲区的次数
SELECT s.STATISTIC#, s.CLASS, s.NAME , s.VALUE
FROM v$sysstat s
WHERE s.statistic# =
(SELECT t.statistic#
FROM v$statname t
WHERE t.NAME = 'redo buffer allocation retries')
;
log file switch (checkpoint incomplete)
进程等待log file 切换完成,但是 由于这个log file的check point进程没有完成,使得log file switch不能完成。当redo log file 的大小设置的太小时可能发生。
等待时间:1秒,没有等待参数
log file switch (archiving needed)
这个等待意味着ARCH进程跟不上LGWR进程写refo log file的速度,在归档模式下,LGWR进程不能覆盖或者切换redo log file,直到ARCH进程将redo log归档到归档日志的目标位置。对归档日志文件的写入失败,可能会终止归档进程,并在alert log中报告。
等待时间:1秒,无参数
log file switch (clearing log file)
当log正在使用CLEAR LOGFILE命令清除时,或者恢复执行时清除logfile时等待一个log switch。
等待时间:1秒,无参数
log file switch completion
等待log switch完成
等待时间1秒,无参数
log file sync
当一个用户session完成一个事务(提交或回滚),在继续这个session的操作之前,session的redo信息必须由LGWR写入redo log,进程将在这个事件上等待直到LGWR进程完全写redo log file的io。调整LGWR进程使其得到良好的磁盘吞吐量。如:不要将重做日志放在RAID5阵列;如果有大量的短周期的事务,则看能否批处理这些事务,使COMMIT次数减少。
主要从三个方面来考虑这个等待事件:
1, 是否有高提交率,可以使用10046事件进行追踪或者使用log miner对日志分析。
2, Io子系统的速率如何,可以从v$system_event中获得LGWR的平均等待时间。
3, 日志缓冲区是否太大,过大的缓冲区,使得LGWR一次写入量变大,写入频率变慢
参数:
P1: log buffer中需要被同步的buffer数量
等待时间1秒