SORT_AREA 初期化パラメータ

主に Oracle 8i,9i の 共有サーバー構成 におけるソート処理をチューニングするための初期化パラメータ。
WORKAREA_SIZE_POLICY 初期化パラメータOracle 9i が MANUAL になっている場合に利用可能。

10g において、この初期化パラメータの使用は控えるように勧められており互換性のために残されると書かれている。(今後は SGA_TARGET と PGA_AGGREGATE_TARGET に移行していくということだろう)

なお、WORKSIZE_AREA_POLICY を AUTO にするは PGA_AGGREGATE_TARGET を設定する必要があると書かれている。 (SGA_TARGET だけが設定してある場合は不明)
そして PGA_AGGREGATE_TARGET を使用している場合には専用サーバーのセッションにおいては *_AREA_SIZE パラメータのチューニングは無効化されるため設定しても意味がない。

Oracle 9i から登場した PGA_AGGREGATE_TARGET 初期化パラメータは専用サーバーに対しての設定と思い込んでいたのであるが Oracle 10g になってから共有サーバーのメモリ管理に対しても有効になってきているようである。 以下のように Oracle 9i と 10g のマニュアルにおいて表記が微妙に変化してきている。
共有サーバーにおける SELECT 文の一部のランタイム領域は SGA から PGA に書き換えられている。

原文のマニュアルによると

The automatic PGA memory management mode applies to work areas allocated
by both dedicated and shared Oracle database servers.

なお、Oracle 10g からは SGA に対しても SGA_TAGET という初期パラメータが追加されている。(デフォルト無効)

SORT_AREA_SIZE

共有サーバー環境(※1) においてソートの行なうためのメモリの最大数をバイト単位で宣言する。

デフォルト値は 65536

(※1) 専用サーバー構成では推奨されていないので使用しない(遅くなることもあるらしい)。専用サーバーは PGA_AGGREGATE_TARGET Oracle 9i の使用が推奨されている。

SORT_AREA_SIZE はセッションにおいて、常に確保されているものではなくソート処理発生時において ユーザー・プロセスごとに 1 つだけ用意される(※2)。そのメモリの最大獲得サイズが SORT_AREA_SIZE である。
共有サーバーの場合に重要なのが、確保するメモリの最初の SORT_AREA_RETAINED_SIZE までが SGA(UGA) に確保され、残りの不足分が PGA から確保されることである。

(※2) ユーザー・プロセスが複数のソート用メモリ領域を持たないということ。ソート用のメモリはサーバープロセス (≒ PGA) と インスタンス (≒ SGA) 上に確保される。

確保されたメモリ領域はソート処理が完了した時点で SORT_AREA_SIZE における PGA 確保分は解放される。 UGA に確保された SORT_AREA_RETAINED_SIZE 分はフェッチ処理が終了するまで、すなわちレコードを取り出し終えるまでは保持されてフェッチ処理の完了後に解放される。

ホワイトペーパによると Oracle 10g R2 においてソートアルゴリズムが変更されており、 使用可能なメモリーが増えるとパフォーマンスが向上すると書かれている。 また、メモリアクセスの局所性(※3)が向上しているらしい。

(※3) メモリのアクセスにおいて局所性が高いとは CPU における 1 次キャッシュなどの 高速なメモリへのキャッシュヒット率が高いプログラムと解釈している。 クラスタ化係数 が高いアルゴリズムを作ったという表現にも近いのかもしれない。

SORT_AREA_RETAINED_SIZE

共有サーバー環境にのみ使用する初期化パラメータ。

デフォルト値は 0、ただし SORT_AREA_SIZE から導出される(※)

(※) このパラメータを明示的に指定しない場合には 0 となる。これはマジックナンバーであり SORT_AREA_RETAINED_SIZE = SORT_AREA_SIZE に内部的に置換される。Oracle 10g

この初期化パラメータは既述のように UGA に確保されるメモリ量の制限を行なう。 このパラメータにより SGA 内におけるソートメモリの一時的で爆発的な増加によって、 他のキャッシュ情報が SGA から追い出されること(エージアウト/エージング・アウト)を防止する効果がある。

ALTER SESSION などで SORT_AREA_SIZE をメガバイト単位に大きくする実行環境の場合に有用なパラメータであり、 デフォルト 64K バイトで運用できている場合には考慮しなくても良い。



関連初期化パラメータ

  • WORKAREA_SIZE_POLICY Oracle 9i
  • PGA_AGGREGATE_TARGET Oracle 9i
  • SGA_TARGET Oracle 10g

SORT_AREA_SIZEの関連トピックス

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ オラクルサポートセンター