[Oracle] ソートの発生状況の監視とチューニング | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

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