バッチ処理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;
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=’*’
※32KBの場合
ALTER SYSTEM SET DB_32K_CACHE_SIZE = 10 SCOPE=BOTH SID=’*’
![]() |
Oracle SQLチューニング パフォーマンス改善と事前対策に役立つ (DB selection) [ 加藤祥平 ] 価格:2,808円 |