たまに上司やお客様より「テーブルのサイズいくら?」と質問がきます。大抵の場合「このテーブルの存在はどの程度Disk容量を消費しているのだろうか」という事が知りたいようです。質問の通りテーブルのサイズを返答するだけでなく「インデックスのサイズ」も加えて教えてあげると喜ばれるでしょう。(過去には、テーブルサイズの約2.5倍ものインデックスが作られているの見たことあります)
DBA_SEGMENTSからテーブルのサイズを求める
テーブルサイズ確認SQL
select s.OWNER,s.SEGMENT_NAME,segment_type,s.TABLESPACE_NAME ,s.BYTES / 1024 / 1024 m_byte,s.BLOCKS from dba_segments s where segment_type = 'TABLE' and segment_name = 'TBL26' ;
テーブルサイズ確認例
SQL> select s.OWNER,s.SEGMENT_NAME,segment_type,s.TABLESPACE_NAME
,s.BYTES / 1024 / 1024 m_byte,s.BLOCKS
2 from dba_segments s
3 where
4 segment_type = 'TABLE'
5 and segment_name = 'TBL26'
6 ;
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME M_BYTE BLOCKS
________ _______________ _______________ __________________ _________ _________
SOONI TBL26 TABLE TBS02 328 41984
SQL>
DBA_SEGMENTSからインデックスのサイズを求める
インデックスサイズ確認SQL
select i.TABLE_OWNER,i.TABLE_NAME,s.SEGMENT_TYPE,i.INDEX_NAME ,i.TABLESPACE_NAME,s.BYTES /1024 /1024 m_byte,s.BLOCKS from dba_segments s inner join dba_indexes i on s.OWNER = i.OWNER and s.SEGMENT_NAME = i.INDEX_NAME and s.SEGMENT_TYPE = 'INDEX' and i.TABLE_OWNER ='SOONI' and i.TABLE_NAME ='TBL26' ;
インデックスサイズ確認例
SQL> select i.TABLE_OWNER,i.TABLE_NAME,s.SEGMENT_TYPE,i.INDEX_NAME
2 ,i.TABLESPACE_NAME,s.BYTES /1024 /1024 m_byte,s.BLOCKS
3 from dba_segments s inner join dba_indexes i
4 on s.OWNER = i.OWNER and s.SEGMENT_NAME = i.INDEX_NAME and s.SEGMENT_TYPE = 'INDEX'
5 and i.TABLE_OWNER ='SOONI' and i.TABLE_NAME ='TBL26'
6 ;
TABLE_OWNER TABLE_NAME SEGMENT_TYPE INDEX_NAME TABLESPACE_NAME M_BYTE BLOCKS
______________ _____________ _______________ _______________ __________________ _________ _________
SOONI TBL26 INDEX TBL26_IDX01 TBS01 256 32768
SOONI TBL26 INDEX IDX_TBL26_01 TBS01 48 6144
SOONI TBL26 INDEX PK_TBL26 TBS01 33 4224
SQL>
SQL*Plusでの表示用
SET LIN 200 COLUMN SEGMENT_TYPE FORMAT A20 COLUMN SEGMENT_NAME FORMAT A30 COLUMN TABLE_OWNER FORMAT A20 COLUMN TABLE_NAME FORMAT A20 COLUMN INDEX_NAME FORMAT A20 COLUMN OWNER FORMAT A20 COLUMN TABLESPACE_NAME FORMAT A30 COLUMN M_BYTE FORMAT 9999999990.9 COLUMN BLOCKS FORMAT 9999999990
注意点があります
DBA_SEGMENTSにて使用サイズを求める場合HWMまでのサイズ(簡単に言うとかつて使用した最大サイズ)となる点ご注意ください。