UJP - 技術情報

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

     

PCTFREE

PCTFREE


0.更新履歴

  • 2001.04.28 新規作成

1.はじめに

 このドキュメントでは,OracleのCreate Tablespace,Index,Table等で指定するオプションのPCTFREEについて説明する.

2.PCTFREEとは

 PCTFREEとは,パーセントフリーの略である.

 1ブロック内にあらかじめ確保される空き領域の割合(%)を指定するパラメータで,デフォルトは10%である.

 これで確保された空き領域は,更新時に行データが大きくなる場合の予備領域として確保することになる.

3.行移行はあまりよくない

 行データがあらかじめ確保しておいたブロックより大きくなった場合,別のブロックにその行を移動する. 元のブロックには,移動先のポインタアドレスが設定される.

 この例では,VARCHAR型データに入るデータが大きくなったため,先に確保しておいたブロック1に入りきらないために発生した行移動にイメージである.

 これが頻繁に発生していると,パフォーマンスの劣化となる.

 よって,あらかじめ十分なPCTFREEを設定し,行移動が発生しないようにする.

4.固定長データでも行移動が発生する可能性がある

 VARCHAR2型やNUMBER型のような可変長データ型の場合は行移動が発生しやすいが,固定長のCHAR型でも発生する可能性がある.
 CHAR型では,INSERTされた時にデータがない場合(NULL)の場合は領域が確保されていない状態なので,データがセットされた時点で増える可能性がある.

5.検索用テーブルやインデックスのPCFTREEは少なくても良い

 PCFREEを多く設定すると,データ格納効率(確保されるブロック数)が悪くなる.
 よって,検索のみのテーブルは読み取りブロック数の削減なども考慮して,少なめに設定すればよい.(デフォルトの10%程度)

 インデックスは,実際には固定長である場合が多いため,少なめに設定しておいても問題ない.

6.PCTUSEDとの関連

 PCTUSEDは,ブロック内で利用することのできる最小の割合(%)である.

 ブロックがPCTFREEで指定した限界まで満杯になると,そのブロックにおける割合がPCTUSEDより下になるまでOracleはそのブロックに新規データのINSERTを行わない.

 PCTFREE + PCUSED < 100となるように設定する.



広告スペース
Google