- ベストアンサー
ORACLEでの領域計算について教えてください
- ORACLEでCREATE TABLE文を実行する時の領域の計算方法について教えてください。
- テーブル作成時の領域計算方法は、1レコードのバイト数×必要件数を計算すれば良いです。
- PCTFREE、PCTUSED、INITIAL、NEXT、MINEXTENTS、MAXEXTENTSなどのパラメータについても知りたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちわ。 > PCTINCREASEは良くわかりませんが、0にしておけば > 問題ないと書いてありました。 その方が票領域のフラグメンテーションが発生 しにくいですね。 PCTINCREASE は、エクステントサイズの増加率です。 例えば先のサンプルで、PCTINCREASE=50 と設定してあると、 第1エクステントサイズ=INITIAL=2000K 第2エクステントサイズ=NEXT=1000K 第3エクステントサイズ=NEXT*1.5=1500K 第4エクステントサイズ=NEXT*1.5*1.5=2250K となります。 > PCTFREE、PCTUSEDは良くわかりません。 PCTFREE は、UPDATE 文でデータ長が増えることを想定して、 予め確保しておく予備領域の割合です。 → つまり、最初のINSERT 文でデータを投入する際には、 各ブロックにPCTFREE (%) 分の空き領域が取られます。 PCTUSED は逆にデータが削除されていった時に、 ブロック内のデータ使用率がPCTUSED (%) を下回るまで 新しい行が追加されないと言う指定です。 PCTFREE/PCTUSED については、管理者ガイドに説明があります。 ユーザ登録が必要ですが、OTN Japan でPDF 形式のマニュアルを 公開していますので、こちらでDownload されてはいかがでしょうか? > 計算方法としては、1レコードのバイト数×必要件数を単純に > 計算すればよろしいのでしょうか? まずは、各データブロックには、管理用の領域とPCTFREE 分の 空き領域が取られます。 管理用の領域は、Oracle のバージョンによっても異なりますが、 100Byte 前後と思ってください。 (管理領域よりも、PCTFREE とかの方が影響が大きいので) (ブロックサイズ - 管理領域) * (1-(PCTFREE/100)) がデータを格納できる領域サイズです。 領域サイズが分かったら、1ブロックに何レコード格納 できるか計算して下さい。 1ブロックに格納できるレコード数が分かったところで、 最終的なレコード数から必要なブロック数を求めます。 > 増分値はあふれた場合に1回に拡張する値を > 指定すればいいのでしょうか? INITIAL エクステントに収まりきれなかった時に、次に獲得する エクステントサイズを指定します。 > MINEXTENTSを指定する理由がわかりません。 運用を開始してから、動的エクステントの拡張が起きないように 事前に必要なエクステントを獲得しておくために指定します。 Oracle には、1つのエクステントサイズが2GB を超えられない と言う制限がありますので、大規模表ではこれを指定して 事前にエクステントを割り当ててしまいます。 > PCTFREE、PCTUSEDは良く分かりません。 > 通常はどんな値を指定するのでしょうか? 表の性質によって違いますので、詳しくはマニュアル で確認して下さい。 > その他、テーブルを作成するにあたり注意するべき点が > ありましたら、ご指摘ください。 INITRANS, MASTRANS, FREELISTS, FREELIST GROUPS 等のパラメータがあります。 こちらもマニュアルで確認してみて下さい。
- 参考URL:
- http://otn.oracle.co.jp/
お礼
ご回答ありがとうございます。 お礼が遅れて申し訳ありません。 PCTINCREASE、PCTFREE、PCTUSED等、 かなり理解でしました。 本屋さんにも行っていろいろと立ち読みもして だいぶ分かってきました。 分かりやすい長文のご回答、 大変ありがとうございました。 感謝いたします。