行移行と行連鎖の基礎

行移行と行連鎖の基礎について。
双方ともにパフォーマンスに影響がある為、可能な限り回避する設計・運用が必要。

行移行

Update によってレコード全体が長くなり、そのデータブロック中に更新した
レコード全体を格納する空き領域が足りない場合、レコード全体が別の
データブロックに移される。この状態を行移行という。

この時、元々データが入っていたデータブロックには、移行先ブロックの ROWID が入る。
ただし、移行先のデータブロックを丸々使っても格納できない場合は、行連鎖が発生する。

レコード長が増える場合や、更新後のレコード長に対して PCTFREE (空き領域)の
指定が小さすぎる場合などに発生してしまう。

移行後のデータにアクセスする時は、移行元と移行先の両ブロックにアクセス
しなければならない。これが行移行でパフォーマンスが劣化する原因というわけ。
 

行連鎖

1レコードが複数のデータブロックに跨って格納された状態を行連鎖という。

レコードのサイズが、ヘッダ領域は除くデータブロックサイズより大きい場合に発生する。

レコードデータはブロックに ROWID を持つことによって、分断されてもブロックが認識される。


関連記事

人気ブログランキングへ

このページの先頭へ