私は根本的に開発者です-しかし、時々、これらの問題に対処するためのきちんとしたDBAが顧客にいないため、私は決定を求められます...
適切なサイズのSQL Serverデータベース(NorthwindまたはAdventureWorksよりも大きいもの、約2〜4 GBのデータとインデックスなど)を扱う場合の戦略/ベストプラクティスは何ですか?複数のファイル/ファイルグループを使用していますか?
もしそうなら:いくつですか?なぜ?
「すべてに1つのファイルグループ」のアプローチから移行するタイミングを決定する基準は何ですか。
* database size?
* database complexity?
* availability / reliability requirements?
* what else?
複数のファイルグループを使用する場合、いくつ使用しますか? 1つはデータ用、もう1つはインデックス用、もう1つはログ用ですか。データ用にいくつか(いくつ)?選択する理由は何ですか-なぜファイルグループの正確な数を使用するのですか:-)
ヒント、ポインタ、考えをありがとう!
乾杯、マルク
基本的な経験則は、競合を回避するためにファイルを異なるボリュームに分割することですが、パフォーマンスの向上量は、I/Oサブシステムとワークロードによって大きく異なります。たとえば、単一の物理スピンドル上の複数のファイルは、パフォーマンスの点で問題がありますが、ボリュームがSAN RAID 10アレイからの数百のドライブを備えたLUNにある場合の同じ配置は、ディスクキューの長さのカウンターは、I/Oボトルネックが発生しているかどうかを確認する最も簡単な方法としてあなたの友人です。
データベースのI/Oパターン(読み取り専用、読み取り専用、読み取り/書き込み、書き込み専用、書き込み専用)を調べて、それに基づいています。また、適切なRAIDレベルを選択し、ディスクパーティションのオフセット、RAIDストライプサイズ、およびNTFSアロケーションユニットサイズが正しく設定されていることを確認する必要もあります。一部の人々は、非クラスター化インデックスを別のファイルグループに分離することを好みますが、ここでのパフォーマンスの向上は、上記で説明したように異なります。
パフォーマンスだけでなく、管理性と回復可能性も考慮する必要があります。 100GBデータベース用の単一のモノリシックデータファイルがあるということは、復元の単位がそのファイルであることを意味します。それを4つの25GBファイルグループに分割すると、データベースの部分的な可用性と段階的な復元を使用して、破損した場合に単一のファイルグループを復元するだけで済みます。テーブルとインデックスを複数のファイルグループにパーティション分割することで、データベースのどの部分がメンテナンス操作(インデックスの断片化の削除など)の影響を受けるかを制限することもできます。
Tempdbはまったく特殊なケースです。tempdbを分割する理由と方法についてすべて説明している私のブログ記事を紹介します。そこには多くの誤解があります。
ここで「一般化」の推奨事項を提示せずに、ホワイトペーパーとブログ投稿の束を紹介します。
ホワイトペーパー: データベースの部分的な可用性
ブログ投稿: TF 1118に関する誤解 (tempdbレイアウト)
これがお役に立てば幸いです!
データベースを複数のファイルグループに分割する決定は、テーブルの現在のサイズと将来の成長を分析した後で行う必要があります。私の意見では、大規模なデータベースや数百万行のテーブルがない限り、長所と短所を慎重に検討する必要があります。
特定の前提で興味深いシナリオがいくつかあります。
環境を分析して、ファイルグループがSQL Serverの成長、使用、パフォーマンスのニーズに役立つかどうかを判断する必要があります。
複数のファイルグループに移動するためのいくつかの重要なインジケーター( この記事 から):
ファイルグループがデータベースのパフォーマンスを向上させる可能性があることがわかった場合は、コードを記述し、ステージング環境でプロセスをテストしてから、運用サーバーに変更を実装してください。変更を実装する前にいくつかの測定を準備し、その前後で比較します。これらのプロセスは非常に多くのリソースと時間がかかる可能性があるため、メンテナンス期間中にこれらの手順を実行します。
新しいオブジェクト(テーブルとインデックス)を作成するときは、オブジェクトが正しいファイルグループに作成されていることを忘れないでください。期待されるパフォーマンスを確保し、データベースオブジェクトが正しいファイルグループにあることを定期的に検証して、必要に応じて修正してください。