SQL Server 2005/2008-複数のファイル/ファイルグループ-いくつですか?どうして?


11

私は心からデベロッパーです-しかし、時々、顧客はこれらの問題に対処するためのきちんとしたDBAを持っていません。

適切なサイズのSQL Serverデータベース(NorthwindまたはAdventureWorksよりも大きいもの、約2〜4 GBのデータとインデックスなど)を扱う場合の戦略/ベストプラクティスは何ですか-複数のファイル/ファイルグループを使用していますか?

もしそうなら:いくつ?なぜ?

「すべてのための1つのファイルグループ」アプローチから離れるタイミングを決定するための基準は何ですか。

* database size?
* database complexity?
* availability / reliability requirements?
* what else?

複数のファイルグループを使用する場合、いくつ使用しますか?データ用、インデックス用、ログ用 データのいくつか(いくつ)?あなたの選択の理由は何ですか-なぜあなたはその正確な数のファイルグループを使用するのですか:-)

ヒント、ポインタ、考えをありがとう!

乾杯、マーク

回答:


16

基本的な経験則は、競合を避けるためにファイルを異なるボリュームに分離することですが、得られるパフォーマンス向上の量は、I / Oサブシステムとワークロードによって大きく異なります。たとえば、単一の物理スピンドル上の複数のファイルはパフォーマンスが低下する限り吸い込みますが、ボリュームがRAID 10アレイから数百のドライブを備えたSAN LUN上にある同じ配置でも問題ありません。ディスクキューの長さカウンターは、I / Oのボトルネックがあるかどうかを判断する最も簡単な方法です。

データベースのI / Oパターン(読み取り専用、読み取り主に、読み取り書き込み、書き込み主に、書き込み専用)を見て、それに基づいています。また、適切なRAIDレベルを選択し、ディスクパーティションオフセット、RAIDストライプサイズ、およびNTFSアロケーションユニットサイズが正しく設定されていることを確認する必要があります。一部の人々は、非クラスター化インデックスを個別のファイルグループに分離することを好みますが、ここでのパフォーマンスの向上は、上記で説明したように異なります。

パフォーマンスだけでなく、管理性と回復性も考慮する必要があります。100GBデータベース用の単一のモノリシックデータファイルがあるということは、復元の単位がそのファイルであることを意味します。4つの25GBファイルグループに分割すると、データベースの部分的な可用性と断片的な復元を使用して、破損した場合に1つのファイルグループのみを復元できます。テーブルとインデックスを複数のファイルグループにパーティション分割することにより、データベースのどの部分がメンテナンス操作(インデックスの断片化の削除など)の影響を受けるかを制限することもできます。

Tempdbはまったく特別なケースであり、tempdbを分割する理由と方法について説明している私のブログ投稿で指摘します-そこには多くの誤解があります。

ここでは、「掃引の一般化」の推奨事項を提示せずに、読者が読むことができるホワイトペーパーとブログ投稿を多数紹介します。

これがあなたを助けることを願っています!


1つの感謝そんなに、ポール-偉大なポスト、偉大なリンク-優秀
marc_s

グレート答えポール- >私はいくつかの以前のSQLServer、ハードディスクの設計に関するよくある質問(。例えばBus1_Disk1上のTempDB、MY_DB Bus2_Disk1上、等。)...読む時間....見つけるしようとしていた
Pure.Krome

4

データベースをさまざまなファイルグループに分割する決定は、テーブルの現在のサイズと将来の成長を分析した後に行う必要があります。私の意見では、大規模なデータベースまたは数百万行のテーブルがない限り、長所と短所を慎重に検討する必要があります。

特定の前提の下で興味深いいくつかのシナリオがあります。

  • 2つのファイルグループ:データとインデックス
  • 3つのファイルグループ:読み取り専用テーブル、読み取り/書き込みテーブル、インデックス
  • 複数のファイルグループ:読み取り専用、読み取り/書き込み、インデックス、キーテーブル1、キーテーブル2、...

環境を分析して、ファイルグループがSQL Serverの成長、使用、およびパフォーマンスのニーズに役立つかどうかを判断する必要があります。

複数のファイルグループに移動するためのいくつかの重要なインジケーターこの記事から):

  • ディスクキューがアプリケーションとユーザーエクスペリエンスの問題を引き起こしているとき
    • この場合、IO集約型テーブルを格納する新しいファイルグループで追加のディスクドライブを活用することを検討してください。
  • 特定のテーブルがデータベースの10%以上の場合
    • この場合、これらの特に大きなテーブルを、個別の基盤ディスクドライブ上の個別のファイルグループに移動することを検討してください。
    • 残りのテーブルに比例したテーブルサイズに応じて、個々のテーブルのファイルグループの構築を検討します。
  • 大きなテーブルで非クラスター化インデックスとデータスペースが等しい場合
    • この場合、非クラスター化インデックスからデータとクラスター化インデックスを分割することを検討してください
  • ほぼ等しい割合の読み取り専用データと読み取り/書き込みデータがデータベースに存在する場合
    • この場合、読み取り専用データを読み取り/書き込みデータとして別のファイルグループに分割することを検討してください。
  • データベースのメンテナンスを実行するのに十分な時間がない場合
    • この場合は、大きなテーブルを異なる基になるディスク上の個別のファイルグループに分割し、並行してメンテナンスを実行することを検討してください。
  • ビジネスまたはアプリケーションが大幅に変化し、データがはるかに高い速度で成長する場合
    • この場合、潜在的な成長を理解するためにユーザーと協力することを検討してください
  • アーカイブされたデータが本番データと同じデータベースにある場合
    • この場合は、個別のファイルグループ、またはこのヒント-SQL Serverでのデータのアーカイブの1つ以上の手法を検討してください。

ファイルグループによってデータベースのパフォーマンスが向上する場合は、運用サーバーに変更を実装する前に、コードを記述し、ステージング環境でプロセスをテストします。変更を実装する前にいくつかの測定値を準備し、それらを前後に比較します。これらのプロセスは非常にリソースを消費し、時間がかかるため、メンテナンス期間中にこれらの手順を実行してください。

新しいオブジェクト(テーブルとインデックス)を作成するときは、オブジェクトが正しいファイルグループに作成されることを忘れないでください。期待されるパフォーマンスを確保し、データベースオブジェクトが正しいファイルグループにあり、必要に応じて修正されることを定期的に検証してください。


+1優れた投稿-ヒントとリンクをありがとう!
marc_s
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.