断片化 ( Fragmentation )
断片化には物理記憶域構造における断片化と論理記憶域構造での断片化がある。
断片化が進行することで使用されない領域が発生、非効率的なI/O操作の増加によりレスポンスが低下する。
物理構造とは、オラクルデータベース(データファイル)の断片化を示す。
ファイルの断片化によって不連続な配置が行われ無駄なシーク操作により DISK I/O 性能が低下する。
専用パーティションのすすめ
データファイルの配置先には、専用のパーティションを用意する。
別のシステムとパーティションを共有するとファイルの断片化を促進してしまう。
データファイルの自動拡張(AUTOEXTEND句)機能においても(小さな拡張を続けていると)断片化が発生する。エラー対策としての保険として設定しておき、定期的に監視し、必要な時期に必要な分を手動で拡張するようにメンテナンスすることが望ましい。
Windows系の場合、市販のデフラグツールを使用すると(必ずインスタンスのシャットダウンした後に実行する)「物理記憶域構造における断片化」は解消される。しかし、以下の論理構造での断片化は解消しない。
論理記憶域構造での断片化
エクステントの断片化、レコードの断片化、メモリの断片化の種類がある。
テーブルスペース上のエクステントの断片
データセグメントのハイウォータマークが領域の確保サイズを超えるときにセグメントは拡張される。
新しいエクステントには連続した空き領域を必要とする。
サイズの異なる複数のエクステントが、互いに獲得と解放を繰り返していくと連続領域が減り、解放した領域を効率的に再利用できなくなり穴だらけとなっていく。
下図は断片化したテーブルスペース上でエクステントを獲得しているイメージ図である。
エクステントが拡張されていくイメージ
|
関連事項
行連鎖、行移行 (データブロック上のレコードピースの断片化)
- 行連鎖
データ挿入時に発生する現象。
データレコードを格納するときに 1 ブロックに収まらずに、行断片(レコードピース)を 2つ以上の異なるデータブロックに分割してデータを格納している状態をさす。
- 行移行 (行断片の移行)
データ更新時に発生する現象。
データレコードを更新するときにブロック内の空き領域を使用してもデータブロック内に収まらず実データの行断片(レコードピース)を、すべて、別のデータブロックへ引越している状態をさす。
グローバルエリアのメモリの断片化
データベース・バッファ・キャッシュ、共有プール、ラージプール