メモリソート率を確認する

Pocket

【概要】
OracleではORDER BY句による並べ替えや表の結合を行う際にデータのソート処理を行いますが、その際、
ソートされるデータ量が初期化パラメータSORT_AREA_SIZEの値まで収まれば、メモリー上でソートが行われ、
収まらなければディスク(一時表領域)上でソートが行われます。
ソート処理はメモリー上で行う方が当然高速であるため、
できる限りメモリー上でソート処理が行われるようSORT_AREA_SIZEをチューニングする必要があります。
メモリーソート回数、ディスクソート回数はv$sysstatから取得します。
ディスクソート発生比率はメモリーソート回数とディスクソート回数の値から算出します。
【SQL文】
/*
|| ■メモリソート率を確認する
||
|| 【項目の説明】
|| MEM_SORT :統計名が「sorts (memory)」で、メモリー内で完全に実行され、
||   ディスク書込みを必要としないソート操作数
|| DISK_SORT :統計名が「sorts (disk)」で、1回以上のディスク書込みを必要としたソート操作数
|| Ratio :メモリソート率(%)
*/
set echo off
set lines 120
set pages 100

clear col
ttitle off

col MEM_SORT for 999,999
col DISK_SORT for 999,999
col Ratio for 999

ttitle left ‘■■■ メモリソート率 ■■■’
spool memsort_ratio.lis

SELECT a.value MEM_SORT
, b.value DISK_SORT
, a.value * 100 / (a.value + b.value) Ratio
FROM v$sysstat a, v$sysstat b
WHERE a.name = ‘sorts (memory)’
AND b.name = ‘sorts (disk)’
;
spool off
clear col
ttitle off
set line 80

以上です (^^♪

【対応】
目安としては、システム全体で発生したソートのうち、ディスク上(一時表領域上)で行われたソートの比率が
5%以内に収まってることが望ましいとされています。
ディスクソートの比率が5%以上になる場合は、初期化パラメータSORT_AREA_SIZEの値を大きくするなどして、
チューニングを行います。
ただし、不要なソート処理が行われている可能性もあるため、場合によってはSQLの見直しも必要になります。

以上です (^^♪