【ORACLE】バッチ処理SQLチューニング方法3つ

夜間バッチ処理のチューニングがなかなか上手くいかない場合には今回記載している内容を試してみてください。

SQLが遅くなる原因やチューニング方法については↓で紹介していますので参考にしてください。
>>SQLが突然遅くなる原因と対応方法
>>【SQL】SELECT文のチューニング方法まとめ

バッチ処理SQLチューニング方法3つ

1.パラレル実行(多重実行)

データベースサーバのリソースに余裕がある場合はパラレル実行するのが最も簡単で早くなります。

・セッション単位でパラレル実行する方法
 ALTER SESSION FORCE PARALLEL DDL PARALLEL 4;

・データ抽出に時間が掛かっている場合
 ALTER SESSION FORCE PARALLEL QUERY PARALLEL 4;

・SQL単位でパラレル実行する方法
 INSERT INTO TABLE1 SELECT /*+PARALLEL(4)*/ * FROM TABLE1;

2.セッション単位に割り当てるメモリサイズの拡張

データのソートやハッシュジョイン結合は通常メモリ上で処理されます。

しかし大量データを扱う場合、メモリ内に収まらない場合一時表領域を利用して処理されます。

一時表領域は通常のテーブルと同じディスクになりますので、メモリ>>ディスクとなり急激に処理時間が遅くなる場合があります。

このような場合にはPGAサイズを変更するか、以下のようにセッション単位にメモリサイズを拡張してみてください。

ALTER SESSION SET WORKAREA_SIZE_POLICY = MANUAL;
ALTER SESSION SET SORT_AREA_SIZE = 2147483647;

3.表領域のブロックサイズの変更によるI/O効率の向上

ORACLEはブロックと呼ばれる単位ごとにデータの読み込みを行います。そしてこのブロックに複数の行データが格納されています。

ORACLEのブロックのサイズのデフォルト値は8KBとなっています。

通常はこれで十分ですが、16KBや32KBとすることで大量データの読み取り速度を向上させることができます。

しかしブロックサイズは基本的にはデータベース単位に決まっており変更するにはデータベースの再作成、もしくは表領域単位に再作成が必要です。

さらに表領域単位にブロックサイズを作り直す場合は、作り直すブロックサイズに対応できるようにメモリのサイズ設定が必要です。

・キャッシュメモリサイズの設定
ALTER SYSTEM SET DB_16K_CACHE_SIZE = 10 SCOPE=BOTH SID='*'

※32KBの場合
ALTER SYSTEM SET DB_32K_CACHE_SIZE = 10 SCOPE=BOTH SID='*'

最後に

最後までお読みいただきありがとうございます。

SQLのチューニング方法は↓で紹介していますので参考にしてください。
>>SELECT文のSQLチューニング方法まとめ