しかし最近、すべてのデータベースに複数のmdfファイルが存在するサーバー上のデータベースに遭遇しました。
これは、誤った命名規則が原因です。Microsoftは、すべてのデータベースに1つのプライマリデータファイルがあると言っていますが、それは1つの「mdfデータファイル」しか持てないということではありません。データベースには、.mdf
拡張子付きの多くのデータファイルがありますが、プライマリデータファイルは1つだけです。与える方が良いですmdf
プライマリデータファイルと拡張子をndf
適切な境界を持つようにセカンダリデータファイルではなく、これは何を目撃することは正常ですので、あなたは、プライマリデータファイルに.abc拡張子を与えることができます何のハードと高速のルールではありません。実際には、好きな拡張子を付けることができます。
データベースに複数の.mdfファイルを作成することには、何か賢明なことはありますか?
つまり:
データベースに複数のプライマリファイルを用意することについて、何か知恵はありますか?
答えは「いいえ」です。データベースには1つのプライマリデータファイルしか含めることができません。
しかし、あなたが意味するならば:
データベースに複数のデータファイル(.mdf、.ndf、または別の名前が付けられている)を使用することに、何か知恵はありますか?
それは、複数のデータファイルを使用して利用できる場合とできない場合があります。それらが異なる物理ドライブに分散している場合(私はスピンドルについて話している)、書き込み集中型のアプリケーションにはいくつかの利点があります。それらがすべて同じ論理パーティション上にある場合、基盤となるのは共通のリソースを使用するため、何の利点もありません。ファイルおよびファイルグループを使用すると、データベースを複数のディスク、複数のディスクコントローラー、またはRAID(独立したディスクの冗長アレイ)システムにわたって作成できるため、データベースのパフォーマンスが向上します。たとえば、コンピュータに4つのディスクがある場合、3つのデータファイルと1つのログファイルで構成され、各ディスクに1つのファイルがあるデータベースを作成できます。データがアクセスされると、4つの読み取り/書き込みヘッドが同時に並列にデータにアクセスできます。
このMSDN BOLの記事に従って
ファイルグループは、各ファイルグループ内のすべてのファイルにわたって比例的な塗りつぶし戦略を使用します。SQL Serverデータベースエンジンは、データがファイルグループに書き込まれるときに、すべてのデータをいっぱいになるまで最初のファイルに書き込むのではなく、ファイルグループ内の各ファイルにファイル内の空き領域に比例した量を書き込みます。次に、次のファイルに書き込みます。たとえば、ファイルf1に100 MBの空きがあり、ファイルf2に200 MBの空きがある場合、1つのエクステントがファイルf1から割り当てられ、2つのエクステントがファイルf2から割り当てられます。このようにして、両方のファイルがほぼ同時にいっぱいになり、単純なストライピングが実現されます。
私が知っている他の利点は、1つのデータファイルがあり、他のサーバーでこのデータベースを復元する場合、1 TBのデータベースを検討することです。1TBの空き領域はほとんどありません。同じデータベースをサイズが250 Gの異なるファイルに分散すると、復元が容易になります。これは実際のシナリオではないかもしれませんが、1 TBドライブ1台よりも4台の250 Gドライブを搭載したサーバーを見つけるのが少し簡単になります。
多くのデータファイルの代わりに、異なるファイルグループを用意するほうがいいと思いますが、ここでも多くの環境はありません。複数のファイルグループで構成されるデータベースは、段階的な復元と呼ばれるプロセスによって段階的に復元できます。断片的な復元は、すべての復旧モデルで機能しますが、完全モードおよび一括ログモデルでは、シンプルモードよりも柔軟性があります。データベース内のファイルまたはファイルグループは、個別にバックアップおよび復元できます。これにより、データベースの残りの部分を復元しなくても、破損したファイルのみを復元できます。ファイルグループバックアップ内のファイルは、個別またはグループとして復元できます