目次
行連鎖と行移行の違いのまとめ
いつ起こるか | 仕組み | 主な要因 | |
---|---|---|---|
行連鎖 | Insert直後から。1行が1ブロックに収まらないほど大きい。 | 行が複数ブロックに分割 | 行サイズ > ブロックサイズ |
行移行 | Update 後。元は収まっていた行が更新でサイズが増え、同一ブロックに空きがなく別ブロックへ丸ごと移動。 | 元ブロックには転送ポインタだけ残り、行本体は別ブロックへ。インデックスROWIDは元の場所を指し続けるため追跡I/Oが発生。 | PCTFREE不足、更新で可変長列が伸びた、ブロック空き不足。 |
行連鎖(Row Chaining)
原因:行サイズがブロックサイズを超えると発生します。
行移行(Row Migration)
原因:Insert時は収まっていたが、Update で行が伸び、同一ブロック内の余白が足りない。PCTFREEが低すぎる場合が多い。
PCTFREEとは
各ブロック内に「将来の Update のために残しておく空き領域の割合」を指定するパラメータです。
更新(Update)で可変長列が伸びやすい表にPCTFREEを大きめにすると、行移行(Row Migration)の発生を抑制できます。
逆に小さすぎると、更新時に同一ブロックに収まらず移行が起きやすくなります。
追記専用でほぼ更新なし(監査ログ等)の表の場合は、 PCTFREE を下げる(例:5–10%)と密度が上がります。
関連の記事