データベース - IBM DB2 - 領域やテーブルの容量

 クラウディア
1. 概要
2. テーブルの容量を調べる

1. 概要

 使っているデータベースのあるテーブルが、いきなり馬鹿でかくなる可能性がありまして。  表題のような内容を調べる必要が出てきました。  取り急ぎ、参考サイト。
DB2 データベースの容量(サイズ)の大きいテーブルの確認 - オーロラさんの勉強帳」
「DB2勉強する : 表領域、テーブルやインデックスの容量を確認する。」
「ADMINTABINFO 管理ビューおよび ADMIN_GET_TAB_INFO 表関数 - 表のサイズおよび状態に関する情報の検索」
「[Db2] データベースに含まれる各表のサイズを一覧する方法
 最も信頼のおけるはずの、当の本人「巨人 IBM」のサイトは、案外説明不足だったり、日本語かと思えば読もうとすると読み切らないうちに英語のページへとんじゃったりと、わたしには、役に立たないことが多いのだ。  コンサル料払えってことかもしれませんが、まぁ、巨人だけに細かい思いやりに書けたりするのは仕方ありませんなぁ。

2. テーブルの容量を調べる

 「巨人 IBM」のサイトで紹介されているのは大雑把すぎるうえに時間がかかってしょうがないので、他のサイトのものを丸パクリ。  管理者権限のあるユーザ(スキーマ?)で、データベースへアクセスしなければなりません。

SELECT
    TABSCHEMA
   ,TABNAME
   ,SUM(DATA_OBJECT_P_SIZE)		DAT
   ,SUM(INDEX_OBJECT_P_SIZE)	INDX
   ,SUM(LONG_OBJECT_P_SIZE)		LNG
   ,SUM(LOB_OBJECT_P_SIZE)		LOB
   ,SUM(XML_OBJECT_P_SIZE)		XML
FROM
    SYSIBMADM.ADMINTABINFO
WHERE
	    TABSCHEMA = 'スキーマ名'
	AND TABNAME   = 'テーブル名'
GROUP BY
    TABSCHEMA,
    TABNAME;
 てな感じで・・・。  「WHERE」句は、スキーマやテーブルで絞る場合ですな。  この「WHERE」句をつけても、「GROUP BY」以降をはずしてはいけません。「SQL」エラーになっちゃいます。  そうでなくても、何故か、「WHERE」句をつけるとあるはずのスキーマ・テーブルなのに、1件もとれないことがあります。  時間はかかるかもしれませんが、「WHERE」句なしの方が、無難なようです。  すなわち。

SELECT
    TABSCHEMA
   ,TABNAME
   ,SUM(DATA_OBJECT_P_SIZE)		DAT
   ,SUM(INDEX_OBJECT_P_SIZE)	INDX
   ,SUM(LONG_OBJECT_P_SIZE)		LNG
   ,SUM(LOB_OBJECT_P_SIZE)		LOB
   ,SUM(XML_OBJECT_P_SIZE)		XML
FROM
    SYSIBMADM.ADMINTABINFO
GROUP BY
    TABSCHEMA,
    TABNAME;
 で、このそれぞれの値ですが、スキーマ名とテーブル名はいいとして、他のものは、参考サイトによれば ・DATA_OBJECT_P_SIZE データオブジェクトの物理サイズ ・INDEX_OBJECT_P_SIZE 索引オブジェクトの物理サイズ ・LONG_OBJECT_P_SIZE 長形式オブジェクトの物理サイズ ・LOB_OBJECT_P_SIZE LOBオブジェクトの物理サイズ ・XML_OBJECT_P_SIZE XMLオブジェクトの物理サイズ  だそうな。  単位は、「キロバイト」だそうで・・・。  データとインデックスはわかるとして、「LOB」「XML」もうっすら想像はつきます。  「長方形」ってなんだろう?  って思いましたら、孫引きになりますが「ADMINTABINFO 管理ビューおよび ADMIN_GET_TAB_INFO 表関数 - 表のサイズおよび状態に関する情報の検索」に詳細が書いてあるようです。  「P_SIZE」は、「phisycal size」で物理サイズですね。  同じ接頭辞を持つ「L_SIZE」もあって、「logical size」、論理サイズですね。
ハイスピードプラン