物理属性句で指定を検討する設定項目

自動セグメント管理を使用する現在のデフォルト(かつ推奨)構成であれば、PCTUSED指定は不要。

設定項目 検討要否 要否理由
PCTFREE デフォルト10。UPDATEによるレコード長増加有無により調整
PCTUSED 自動セグメント管理では使われない
INITRANS デフォルトの1を通常変更しない。
複数のトランザクションで同時に同じブロックへの更新が頻発するような場合は、値を増やすことを検討
(ブロックヘッダサイズが増えるので注意)

PCTFREE

  • 一旦インサートしたらUPDATEによるレコード長増が発生しないテーブル(集計テーブルや統計処理のために毎度レプリケーションしているようなテーブル)については、10%が無駄になるので、0にする。
  • 登録だけとりあえずされるが、必要な情報はあとから入力されるようなテーブルはレコード長が伸びやすいので大きめにする。
    • 大量に登録される場合はそのまま当てはまる。大量にあとからレコード長が伸びるから。
    • オンライン処理で逐次登録、入力が比較的すぐ行われる場合はブロック内で調整できる余地があるから小さめでも良い?(要確認)
  • レコード長が伸びるレコードの数・1ブロック内に入る平均レコード数・レコード全体の長さからみて伸びる列がどの程度か、をふまえて決める。
  • Oracle はレコードの残り列がすべてNULLの場合はデータブロック上全て省略するので、後から定義上後ろの列に値が入る場合は特に注意。
本当にPCTFREEを0にしてもいいんだっけ?となったときのために・・・

OTN Japan - Oracle9i 物理設計:第3部 テーブルの設計』より引用

(4)PCTFREE
初期レコードサイズから最終レコードサイズが長くなりうる率を設定するのが一番効率的な領域管理ができます。例えばINSERT時のレコードの平均サイズが100バイトで、更新を重ねて最終的に平均130バイトになるのであれば30(%)を指定するといいです。レコードサイズの増加率が読めない場合は、デフォルトの10で運用し、再編成時に値を調整します。読取専用の表であれば0でも構いません。