ファイルとファイル グループの使用

SQL Server は、一連のオペレーティング システム ファイルにデータベースをマップします。データとログ情報が同じファイルに混在することはなく、各ファイルは 1 つのデータベースでのみ使用されます。ファイル グループはファイルの名前付きコレクションで、バックアップ操作や復元操作などのデータ配置作業やデータ管理作業を簡素化するために使用されます。詳細については、「ファイルとファイル グループのアーキテクチャ」を参照してください。

ファイルとファイル グループのデータの格納方法

ファイル グループには、ファイル グループ内のすべてのファイルを対象として、各ファイルの空き領域に比例したデータ格納方法が使用されます。SQL Server データベース エンジンは、データをファイル グループに書き込む際には、最初のファイルがいっぱいになるまでそのファイルにすべてのデータを書き込むのではなく、ファイル内の空き領域に比例してファイル グループ内の各ファイルにデータを書き込みます。その後で、次のファイルにデータを書き込みます。たとえば、ファイル f1 の空き領域が 100 MB で、ファイル f2 の空き領域が 200 MB の場合、ファイル f1 のエクステント 1 つとファイル f2 のエクステント 2 つが割り当てられます。これにより、2 つのファイルがほぼ同時にいっぱいになり、簡易ストライピングが実現されます。

ファイル グループ内のすべてのファイルがいっぱいになると、より多くのデータに対応できるように、データベース エンジンによってファイルが 1 つずつラウンドロビン方式で自動的に拡張されます (データベースが自動拡張されるように設定されている場合)。たとえば、1 つのファイル グループが 3 つのファイルから構成されていて、すべてのファイルが自動拡張されるように設定されているとします。ファイル グループ内のすべてのファイルの領域がいっぱいになると、最初のファイルだけが拡張されます。最初のファイルがいっぱいになり、ファイル グループにデータが書き込めなくなると、2 番目のファイルが拡張されます。2 番目のファイルがいっぱいになり、ファイル グループにデータが書き込めなくなると、3 番目のファイルが拡張されます。3 番目のファイルがいっぱいになり、ファイル グループにデータが書き込めなくなると、最初のファイルが再度拡張され、その後データの書き込み領域がなくなると順次各ファイルの拡張が行われます。

データベースのパフォーマンスの向上

ファイルとファイル グループを使用することで、1 つのデータベースを複数のディスク、複数のディスク コントローラ、または RAID (Redundant Array of Independent Disks) システムにまたがって作成できるので、データベースのパフォーマンスが向上します。たとえば、コンピュータにディスクが 4 個ある場合は、データ ファイル 3 つとログ ファイル 1 つから構成されるデータベースを、各ディスクにファイルを 1 つずつ配置して作成できます。データへのアクセスが行われると、4 つの読み取りと書き込みのヘッドから並列かつ同時にデータにアクセスできます。これにより、データベース操作が高速化されます。ハードウェアによる解決策の詳細については、「データベースのパフォーマンス」を参照してください。

また、ファイルとファイル グループを使用すると、特定のファイル グループにテーブルを作成できるので、データの配置が可能になります。これにより、特定のテーブルのすべての I/O を特定のディスクに割り当てることができるので、パフォーマンスが向上します。たとえば、頻繁に使用されるテーブルを、あるディスク上に配置されたファイル グループ内のファイルに格納し、データベースの使用頻度が低いテーブルを、2 番目のディスクに配置された別のファイル グループ内のファイルに格納できます。

バックアップと復元の実装

複数のファイル グループから構成されるデータベースを、段階的な部分復元という処理によって段階的に復元できます。段階的な部分復元はすべての復旧モデルで機能しますが、単純復旧モデルよりも完全復旧モデルや一括ログ復旧モデルの方が柔軟性が高くなります。段階的な部分復元のシナリオには、データのコピー フェーズ、再実行フェーズまたはロールフォワード フェーズ、および元に戻すフェーズまたはロールバック フェーズという復元の 3 つのフェーズがすべて含まれます。詳細については、「段階的な部分復元の実行」を参照してください。

複数のファイル グループを使用している場合は、データベースのファイルを個別にバックアップおよび復元できます。単純復旧モデルでは、読み取り専用ファイルだけにファイル バックアップが許可されます。ファイル バックアップを使用すると、残りのデータベースを復元しないで損傷したファイルだけを復元できるので、復旧を高速化できます。たとえば、物理的に異なるディスクに配置されている複数のファイルからデータベースが構成されていて、1 つのディスクに障害が発生した場合は、障害が発生したディスク上のファイルだけを復元する必要があります。詳細については、「BACKUP (Transact-SQL)」を参照してください。

ファイルとファイル グループのデザインに関する規則

ファイルとファイル グループに関連する規則は次のとおりです。

  • 1 つのファイルまたはファイル グループを複数のデータベースで使用することはできません。たとえば、sales データベース内のデータとオブジェクトが格納されているファイル sales.mdfsales.ndf を他のデータベースが使用することはできません。

  • ファイルは 1 つのファイル グループにしか所属できません。

  • トランザクション ログ ファイルをファイル グループに格納することはできません。

推奨事項

ファイルとファイル グループを使用して作業するときの一般的な推奨事項を次に示します。

  • 大部分のデータベースは、1 つのデータ ファイルと 1 つのトランザクション ログ ファイルで正常に機能します。

  • 複数のファイルを使用する場合は、追加ファイル用に 2 番目のファイル グループを作成し、既定のファイル グループとして設定します。これにより、プライマリ ファイルにはシステム テーブルとシステム オブジェクトだけが格納されます。

  • パフォーマンスを最適化するには、使用可能な、できるだけ多くの、異なるローカル物理ディスクにファイルまたはファイル グループを作成します。また、大きな記憶域を占有する可能性のあるオブジェクトは、別々のファイル グループに配置します。

  • ファイル グループを使用すると、特定の物理ディスク上にオブジェクトを配置できます。

  • 同じ結合クエリで使用する各テーブルは別のファイル グループに配置してください。これにより、結合されるデータが並列ディスク I/O によって検索されるので、パフォーマンスが向上します。

  • アクセス頻度が高いテーブルとそれらのテーブルに属する非クラスタ化インデックスは、別々のファイル グループに配置してください。これにより、ファイルが別の物理ディスク上にある場合に並列 I/O が行われるので、パフォーマンスが向上します。

  • トランザクション ログ ファイルは、他のファイルやファイル グループと同じ物理ディスク上に配置しないでください。