事象
STATSPACK.PURGE という不要なスナップショットを削除する処理を行っているが、使用率が下がらない。
原因
STATSPACK.PURGE 処理には、とあるパラメタを設定しないと削除されない以下のようなセグメントが存在する。
- stats$sqltext
- stats$sql_plan
これらのセグメントを含める場合、i_extended_purge パラメタを TRUE とする必要がある。
exec statspack.purge(15, i_extended_purge=>true);
また、上記を指定しても表領域の肥大化が解消されない場合、表領域の縮小(move/rebuild)を実施する必要がある。
alter table perfstat.stats$sqltext move tablespace STATSTBS;
alter index perfstat.stats$sqltext_pk rebuild;
STATSPACK.PURGE 処理は内部ではDELETEが実行されているため
おまけ
STATSPACK 関連のセグメントの使用状況は以下SQLで確認可能。
col partition_name for a50
col owner for a30
col segment_name for a50
col segment_name for a50
select segment_type,owner,segment_name,partition_name,
bytes/1048576 "SIZE(MB)", trunc(bytes*100/t.tb, 2) "%" from dba_segments,
(select sum(bytes) tb from dba_segments where tablespace_name='<表領域名>') t
where tablespace_name='<表領域名>' order by 6 desc,1;