oracle

Oracle テーブルのサイズ(使用状況)を調べる

たまに上司やお客様より「テーブルのサイズいくら?」と質問がきます。大抵の場合「このテーブルの存在はどの程度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までのサイズ(簡単に言うとかつて使用した最大サイズ)となる点ご注意ください。

HWMについて

以下の手順でテーブルの断片化解消とHWMを下げる事ができます

表領域のサイズや使用状況は以下でわかります

スポンサーリンク
コピペで使う