新・ソートに関する検証 その1

<新・ソートに関する検証 その1>
ペンネーム グリーンペペ

今回からソート処理に関する検証を行います。
9iからソート処理に関わる新しい機能が用意されました。
自動PGA管理です。

□自動PGA管理って何?
8iまでは、SORT_AREA_SIZEやHASH_AREA_SIZEなどの初期化パラメータでセッシ
ョン単位のメモリ使用量の上限を設定していました。
9iより以下の初期化パラメータにより、インスタンス単位でプロセスが使用す
るSQL作業領域であるPGA(プログラム・グローバル・エリア)メモリの使用量の
上限を設定できます。

PGA_AGGREGATE_TARGET
インスタンスで使用可能なPGAメモリの総使用量を指定。
インスタンスレベルでの動的変更可能。
設定できる値の範囲は10M~4096G-1バイト。

WORKAREA_SIZE_POLICY
SQL作業領域のサイズを自動チューニングするか、手動チューニングするかを指定。
AUTO:自動
MANUAL:手動

WORKAREA_SIZE_POLICYがMANUALの場合は、従来どおりSORT_AREA_SIZE、
HASH_AREA_SIZEなどのXXX_AREA_SIZEパラメータの値が適用されます。また、値が
AUTOの場合は自動チューニングが有効になり、XXX_AREA_SIZEパラメータの値は無視
されます。PGA_AGGREGATE_TARGETの値が設定されているときのWORKAREA_SIZE_POLICY
のデフォルトはAUTOになります 。

□PGA_AGGREGATE_TARGET値の目安
一般的に以下の計算式を目安とします。
OLTP系システムの場合は、
PGA_AGGREGATE_TARGET=(実メモリの総計*80%)*20%
DSS系システムの場合は、
PGA_AGGREGATE_TARGET=(実メモリの総計*80%)*50%

DSS系の係数の方が大きいのはORDER BY,GROUP BYなどソートを伴った集計処理
が多いことを考慮しています。

SQL作業領域は、以下の3つに分けられます。

optimal   : ソートなどの処理が全てメモリ上で行なわれた場合のSQL作業領域
onepass   : 全ての処理をメモリ上で行なうことができず、最小限のディスク・
            アクセスが発生した場合のSQL作業領域
multipass : 使用できるSQL作業領域非常に小さく、多くの処理でディスク・ア
            クセスが発生した場合のSQL作業領域

そして、チューニングの目標値の目安は以下となります。
optimalの割合 >= 90%
multipassの割合 = 0%

ほとんどの処理がoptimalで実行され、onepassでの実行を少なくすることが目
標となります。

以下のv$sysstatを使用したSQL文より、PGAの使用状況をモニターできます。

select name
,value
,100*(value/
decode((select sum(value) from v$sysstat where name like 'workarea
exec%'),0,null,(select sum(value) from v$sysstat where name like 'workarea
exec%'))) pct
from v$sysstat
where name like 'workarea exec%'
/

NAME                             VALUE        PCT
----------------------------------------------------------------------
workarea executions - optimal    1529         100
workarea executions - onepass       0           0
workarea executions - multipass     0           0

multipassの割合が0%でない場合、またはonepassの割合が10%を超える場合に
は、PGA_AGGREGATE_TARGETの値を増やすことを検討してください。
逆にoptimalの割合が 100% の場合にはPGA_AGGREGATE_TARGETの値を減らして
も問題なさそうです。

今週はここまで。

雨まじり一転の茅ヶ崎にて