テーブルの容量をを求めるには以下の手順で
レコードサイズと1ブロックあたりのレコード格納数を求める必要がある。
手順は以下の通り
■レコードサイズの求め方
レコードサイズ=レコードヘッダ+列ヘッダ+列のサイズ
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1)レコードヘッダ
→3バイト
2)列ヘッダ
→1バイト(ただし、カラムのデータ長が250バイトを超える場合は3バイト)
3)列のサイズ
→カラムの型、桁数によって決定される
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
なお、ANALYZEしているのであればDBA_TABLESよりレコードサイズを取得することができる
SELECT TABLE_NAME ,AVG_ROW_LEN AS 平均レコードサイズ FROM DBA_TABLES
■1ブロックあたりのレコード格納数
1ブロックあたりのレコード格納数=(ブロックサイズーブロックヘッダのサイズー予備領域のサイズ) / レコードサイズ
1)ブロックサイズを確認する
ブロックサイズはDBA_TABLESPACESで確認することができる
SELECT TABLESPACE_NAME ,BLOCK_SIZE FROM DBA_TABLESPACES
2)ブロックヘッダのサイズ
→ 90 + (INITRANS − 1)
3)予備領域のサイズ
→(ブロックサイズ − 1)のヘッダのサイズ) × (PCTFREE / 100)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
PCTFREE、PCTUSED、INITRANSオプション
CREATE TABLEでのオプション。
この句を省略した場合はPCTFREE=10、PCTUSED=40、INITRANS=1となる
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
上記を元にテーブルの容量を求めるとだいたい以下のようになる。
(レコード件数÷1ブロックあたりのレコード格納数)×ブロックサイズ
ただし、ブロックサイズよりレコードサイズが大きかったりするなどの条件によってはまた算出方法が変わるので
もう少し精度を上げたいのであればされに他の点も考慮する必要がある。