DBA_SEGMENTSで各種セグメントのサイズを確認できます
データベースの中には様々なオブジェクト(テーブル、インデックス、ビュー、シノニム、etc)が存在し、オブジェクトは実体(記憶域)を割り当てられるもの(テーブル、インデックス等)と記憶域の割り当てはされないもの(ビュー、シノニム等)に分けられます。この記憶域の割り当てが行われるものをまとめてセグメントと呼び、このセグメント一覧を確認できるのがDBA_SEGMENTSです。
DBA_DSEGMENTSを参照する事で各セグメントが使っている(現在割り当てられている)サイズを確認する事ができるため使用頻度はかなり高いです。DBA_TABLES、DBA_INDEXES、DBA_MVIEWなどと結合して利用する事が多いですが、以下注意点となります。
DBA_SEGMENTSを参照する際の注意点
- 実体は存在してもエクステントの割り当てが行われていない場合一覧に含まれない。
- 例として、create tableしたばかりのテーブルについてはDBA_SEGMENTSへ含まれません。「最初のINSERT」が行われたタイミングで含まれます。(commitしなくともinsertしたタイミングで作られます。(遅延セグメント作成と呼ばれる機能によるものです)また一度レコードができた後はtruncateしようとも割り当てが0になる事はありません。
- 一時表は一覧に含まれない。(実際にレコードが作成されている状況においても含まれることはない)
- パーティションテーブルはパーティション毎にレコードが存在する。またDBA_OBJECTSのようにパーティションテーブル全体を1レコードで持つような事もしていない。(SEGMENT TYPEはテーブルと、パーティションテーブルは異なる。それぞれTABLE/TABLE PARTITIONとなる。)
- ビューは実体持たないので当然DBA_SEGMENTSへは含まれないが、マテリアライズド・ビューは含まれる。