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の見直しも必要になります。