ablog

不器用で落着きのない技術者のメモ

Oracle の集計関数のチューニング

count() とか集計関数を使うとソートが行われ、ディスクソートになると遅くなる。何か良い方法はないものかとぐぐってみたところ、

Question:
夜間バッチに大きなソート処理が実行されている。
夜間帯は通常ほとんどバッチプロセス以外は実行されない。
pga_aggregate_targetの5%しか1プロセスにソートエリアがメモリに割り当て
られないのでは、ディスクソートとなってしまい処理の遅延が発生してしまう。
pga_aggregate_targetを大きくするほどメモリに余裕はない。
なんとかならないのか?


Answer:
大量ソートのバッチトランザクションには以下の呪文をつけて下さい。

alter session set workarea_size_policy = MANUAL;
alter session set sort_area_size = バイト数;

これでトランザクション別に任意に大きなソートサイズを割り当てることがで
きます。

新・ソートに関する検証 その3 | Insight Technology, Inc.

こんな方法があった。