REDOログファイルサイズの違いによる更新処理速度検証

この前少しかかわったシステムのREDOログファイルを見てみると4MBしかなかった。
いくらなんでもすくな過ぎるだろって思ったけど、サイズが小さければ実際どの程度
パフォーマンスに影響が出るのかあまり実感がないので検証してみた。

  • 検証環境
  • 検証方法
    • 10万件INSERTして所要時間を計測

REDOログファイルサイズ4MBで検証

ログファイルサイズ確認

SQL> set lines 1000
SQL> select * From v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIV STATUS                           FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- ------ -------------------------------- ------------- --------
         1          1         38    4194304          1 NO     ACTIVE                                  556353 07-05-04
         2          1         39    4194304          1 NO     CURRENT                                 556359 07-05-04
         3          1         37    4194304          1 NO     INACTIVE                                556348 07-05-04

10万件INSERT

SQL> set timing on
SQL> begin
  2  FOR i in 1..100000 loop
  3  insert into TEST(test_num,test_var,test_var2,test_var3,test_var4,test_var5) 
  4  values(i,'AAAAAA','BBBBB','CCCCC','DDDDD','EEEEEE');
  5  end loop;
  6  end;
  7  
  8  /

PL/SQLプロシージャが正常に完了しました。

経過: 00:00:30.04

実行後のREDOログファイルを確認すると

SQL>  select * From v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIV STATUS                           FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- ------ -------------------------------- ------------- --------
         1          1         47    4194304          1 NO     CURRENT                                 556456 07-05-04
         2          1         45    4194304          1 NO     INACTIVE                                556446 07-05-04
         3          1         46    4194304          1 NO     ACTIVE                                  556451 07-05-04

SEQUENCE#が39から47まで進んでいるので、恐らくログスイッチが8回発生したと思われる。

3回の計測結果はこうなった。

  • 1回目 00:00:30.04
  • 2回目 00:00:35.10
  • 3回目 00:00:26.92

平均 30.6秒。

REDOログファイルサイズ50MBで検証

ログファイルサイズ確認

SQL>  SELECT * FROM V$LOG;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIV STATUS     FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- ------ ---------- ------------- --------
         1          1        173   52428800          1 NO     CURRENT           571394 07-05-04
         2          1        172   52428800          1 NO     INACTIVE          571351 07-05-04
         3          1        171   52428800          1 NO     INACTIVE          571312 07-05-04

10万件INSERT
実行後のREDOログファイルを確認すると

SQL>  SELECT * FROM V$LOG;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIV STATUS     FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- ------ ---------- ------------- --------
         1          1        173   52428800          1 NO     CURRENT           571394 07-05-04
         2          1        172   52428800          1 NO     INACTIVE          571351 07-05-04
         3          1        171   52428800          1 NO     INACTIVE          571312 07-05-04

SEQUENCE#変わってないのでログスイッチは発生していない。
3回の計測結果はこうなった。

  • 1回目 00:00:13.71
  • 2回目 00:00:15.01
  • 3回目 00:00:13.14

平均 13.9秒。
結構違うもんだ。
すべてのREDOロググループが別々のディスクならここまで差が出ないんだろうか。