次の手順を使用して、監査ログテーブルの使用量を計算しようとしました。
AUD$
)Dbaセグメントで使用されるバイトを測定します。
select tablespace_name,bytes from dba_segments
where tablespace_name ='SYSTEM'
and SEGMENT_NAME = 'AUD$';
統計データの再計算。
統計データで使用されているバイトを取得します。
select NUM_ROWS * AVG_ROW_LEN as BYTE_USED
from DBA_TABLES where TABLE_NAME = 'AUD$';
#3から取得した値が#5の値の2倍以上です。割り当てが多すぎるのはなぜですか?
_dba_tables
_での選択は考慮されません。
initial
/next
、minextents
およびfreelist
関連のストレージパラメータを参照)pct_free
_による)initrans
は、特にこのサイズに影響します)つまりデータの物理ストレージはまったく考慮されていません。一方、_dba_segments
_は、含まれるデータ量に関係なく、セグメントの物理ブロックのみをカウントします。
_pct_free
_が50%に設定されていて更新されていないテーブルには、たとえば統計的に半分空のブロックがあり、_dba_tables
_で実行した計算では、_dba_segments
_と比較するとそれがわかります。
データベースへのデータの格納方法(および関連するオーバーヘッド)の詳細については、 論理ストレージ構造 ドキュメントを参照してください。