OracleではORDER BY句による並べ替えや表の結合を行う際にデータのソート処理を行いますが、その際、ソートされるデータ量が初期化パラメータSORT_AREA_SIZEの値まで収まれば、メモリー上でソートが行われ、収まらなければディスク(一時表領域)上でソートが行われます。
ソート処理はメモリー上で行う方が当然高速であるため、できる限りメモリー上でソート処理が行われるようSORT_AREA_SIZEをチューニングする必要があります。
メモリーソート回数、ディスクソート回数はv$sysstatから取得します。
ディスクソート発生比率はメモリーソート回数とディスクソート回数の値から算出します。
select
s1.value SORT_DISK,
s2.value SORT_MEMORY,
trunc( ( s1.value / ( s1.value + s2.value ) ) * 100, 3 ) "SORT_DISK_RATIO(%)"
from v$sysstat s1, v$sysstat s2
where s1.name = 'sorts (disk)'
and s2.name = 'sorts (memory)';
SORT_DISK SORT_MEMORY SORT_DISK_RATIO(%)
---------- ----------- ------------------
92 1424866 .006
目安としては、システム全体で発生したソートのうち、ディスク上(一時表領域上)で行われたソートの比率が5%以内に収まってることが望ましいとされています。
ディスクソートの比率が5%以上になる場合は、初期化パラメータSORT_AREA_SIZEの値を大きくするなどして、チューニングを行います。
ただし、不要なソート処理が行われている可能性もあるため、場合によってはSQLの見直しも必要になります。