ぶりりあんとろーど(仮)

2012-02-20

[]テーブルの容量計算


テーブルの容量をを求めるには以下の手順で

レコードサイズと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ブロックあたりのレコード格納数)×ブロックサイズ


ただし、ブロックサイズよりレコードサイズが大きかったりするなどの条件によってはまた算出方法が変わるので

もう少し精度を上げたいのであればされに他の点も考慮する必要がある。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元