【性能调整】等待事件(五)log相关等待

时间:2022-12-05 07:53:28
 


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秒