読者です 読者をやめる 読者になる 読者になる

小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


【Oracle】アーカイブログモードは処理時間にどの程度影響を与えるか。

はじめに

Oracleのアーカイブログモードは、処理時間にどの程度影響するのでしょうか。
アーカイブログを取得するモードのほうがログを出力する分、処理時間がかかりそうですが、ノーアーカイブモードと比較して、どのくらい遅くなるのか検証してみました。

【オラクル認定資格試験対策書】ORACLE MASTER Bronze[11g SQL基礎Ⅰ](試験番号:1Z0-051)完全詳解+精選問題集 (オラクルマスタースタディガイド)
エディフィストラーニング株式会社 西 昭彦 飯室 美紀 鈴木 佐和 岡野 友紀
ソフトバンククリエイティブ
売り上げランキング: 6,820

条件
  • 100万件のレコードをPL/SQLで削除する。
  • アーカイブログをON/OFFで比較
  • 試行前にキャッシュをクリアし、3回試行して平均する。
ざっくり言うと
  • アーカイブログモードのほうが遅い。
  • 大体、25%くらい遅くなる
  • 通常の運用はアーカイブログモード。それを考慮して性能検証をする。
レコード挿入スクリプト
truncate table table01;
set timing on
insert /*+ APPEND */ into table01 nologging (
id, name, furigana, seibetsu, birthday) 
  (select 
  lpad(rownum, 8, '0'),
  concat('テスト 太郎', TO_MULTI_BYTE(rownum)),
  concat('てすと たろう', TO_MULTI_BYTE(rownum)),
  CASE MOD(rownum, 2)
    WHEN 0 THEN '男'
    ELSE '女'
  END,
  TO_CHAR(TO_DATE('20130101','YYYYMMDD')
    + FLOOR(DBMS_RANDOM.VALUE(0, 365)), 'YYYYMMDD')
  from (select 0 from all_catalog where rownum <= 1000),
       (select 0 from all_catalog where rownum <= 1000)
  );
commit;
レコード削除スクリプト
set serveroutput on;
declare
  vNum NUMBER;
  vDelCount NUMBER;
  vTableRecord NUMBER;
begin
  vNum := 0;
  vDelCount :=0;

  loop
    --レコードを削除
    delete from table01 where 'A' = 'A' and rownum <= 1000;
    vDelCount := SQL%ROWCOUNT;
    dbms_output.put_line (vDelCount);
    commit;
    IF vDelCount = 0 THEN
      exit;
    END IF;
    vNum := vNum + vDelCount;
    
  end loop;
  dbms_output.put_line (vNum || '件削除しました');

end;
/
測定結果

f:id:replication:20150204220118p:plain

試行回数 ノーアカイブモード(秒) アーカイブモード(秒) 処理時間差(%)
1st 62.985 77.625
2st 62.219 78.578
3st 66.734 83.297
avg 63.98 79.83 24.78%増

25%くらい遅くなりました。