
Oracle Serverの「セグメント」は、データベース内の1つのオブジェクトの格納空間です。1つのセグメントは必ず1つの表領域内に格納されますが、これを物理的に言えば、セグメントは表領域を構成するデータファイルに格納されることになります。表領域にデータファイルが複数ある場合は、「エクステント」の動的拡張機能によって各ファイルにエクステントが交互に割り当てられ、データが格納されます。
たとえば、社員表を表領域Aに格納する設定で作成します。表領域Aにファイル1とファイル2があるとき、社員表はファイル1のエクステントを使い切るとファイル2のエクステントを作成し、書き込みをおこないます。このとき、ファイルの残りサイズなどは考慮しないエクステント割り当てが行われます。

SQL Serverには、セグメントのような、データベース内のオブジェクトの空間を指す特別な言葉はありません。オブジェクトは空間も含めてオブジェクトと呼びます。オブジェクトはOracle Serverと同じように、1つのファイルグループ(表領域に相当)を指定して格納します。物理的にはファイルグループを構成するデータァイルに格納されますが、Oracle Serverと異なり、ファイルグループにデータファイルが複数ある場合には複数のファイルが同時にいっぱいになるように、複数のファイルに均等にデータが書き込まれます。
たとえば、社員テーブルをファイルグループAに格納する設定で作成します。ファイルグループAにファイル1とファイル2が割り当てられており、残り容量がそれぞれ2Mバイトと6Mバイトあるとします。各ファイルが同時にいっぱいになるように書き込むわけですから、社員テーブルにデータをINSERTすると、ファイル1とファイル2には1:3の割合でエクステントを確保して書き込んでいくことになります。
このようにファイルグループにデータファイルを複数割り当てるのであれば、物理ディスクごとにデータファイルを1つ配置するとよいでしょう。そうすれば、シーケンシャルなデータアクセスの際にデータファイルごとに別々のスレッドが作成され、物理的にも複数ファイルに対して並列アクセスを行うことになるので、パフォーマンスを向上させることができます。ファイル1とファイル2のファイルサイズが1:3の例をご紹介しましたが、通常は同じサイズで作成します。同じサイズであれば、ディスクアクセスの負荷も均等になり、より効率的な負荷分散といえます。
|