行移行とは
データ更新時に発生する現象
行移行とは、データレコードを更新するときにブロック内の空き領域を使用してもデータブロック内に収まらず
実データの行断片(レコードピース)を、すべて、別のデータブロックへ引越している状態をさす。
移行先の ROWID を行ディレクトリに格納する線形リストで管理している。
※ 行移行は完全な移動ではないので ROWID は変更されていない点がポイント。
ROWID が変更されると、テーブル所有のすべてのインデックスの ROWID を更新しなければならない。
そのためテーブルのデータの更新だけに比べての数倍のコストが必要になる。
ROW MOVEMENT 指定によりパーティション移動を伴う更新の場合には格納先と同時に ROWID も変更される。
(インデックスの更新は、データの更新にくらべて、およそインデックス数 × 2 のコストが余計に必要)
行移行が発生しているレコードの読み込みに最低 2 ブロック必要になるので効率が悪い
空き領域は テーブルの PCTFREE (PCTUSED) パラメータ で管理されているので、そのチューニングを検討する。
行移行 関連事項