
SQL Server 用のディスク/パーティションを設定する最適な方法についてアドバイスを求めています。主な懸念事項は次のとおりです。
SQL ファイルはどのように分離する必要がありますか (データ ファイル、ログ、一時ファイル)?
多数の HDD を RAID してスペースをパーティション分割する方がよいのでしょうか、それとも各 RAID のディスク数を少なくして複数の RAID を作成する方がよいのでしょうか。
データ ファイルとログ ファイルは別の RAID タイプに配置する必要がありますか?
デフォルトのデータベース (master、msdb など) は C: に配置する必要がありますか、それとも他のデータ/ログ ファイルと同じ場所に配置する必要はありますか?
答え1
ここに素敵なブログ投稿があります:http://sqlserveradvisor.blogspot.com/2009/03/sql-server-disk-configuration.html
ディスクアライメントに関するホワイトペーパー:http://msdn.microsoft.com/en-us/library/dd758814.aspx
つまり、OS は RAID 1 に、データ ファイルは RAID 10 (推奨) に、ログ ファイルは RAID 1 に配置する必要があります。
SQL パフォーマンスの記事:http://www.sql-server-performance.com/faq/raid_1_raid_5_p1.aspx
パフォーマンス向上のための 10 のヒントに関する PDF:http://www.stlssug.org/docs/Best_Practices_for_Performance.pdf
また、パフォーマンス上の理由から、TEMPDB を別のディスクに配置することを忘れないでください。Paul Randal がここに来て、その理由をすぐに説明してくれるでしょう。
MS は tempdb の理由を次のように説明しています:http://msdn.microsoft.com/en-us/library/ms175527.aspx
答え2
これは「状況による」という大きな質問です。
私はストレージの専門家ではないので、個々の RAID アレイを作成する方法についての質問にはお答えできませんが、残りの部分についてはお手伝いできます。
最初に考慮する必要があるのは、さまざまなデータベースのワークロードがどのようなものかということです。OLTP (読み取り/書き込み) または DSS/DW (読み取りが主) です。読み取り/書き込みワークロードの場合、冗長性と優れた読み取り/書き込みパフォーマンスを提供する RAID 1 または RAID 10 (RAID 1+0) を検討する必要があります。読み取りが主のワークロードの場合は、RAID 5 を使用できます。読み取り/書き込みワークロードに RAID 5 を使用すべきでない理由は、書き込み時にパフォーマンスが低下するためです。
トランザクション ログは、その性質上、読み取り/書き込み (または、ログ バックアップやレプリケーションなど、トランザクション ログを何らかの目的で使用しているかどうかに応じて、書き込みがほとんど) であるため、RAID 5 に配置しないでください。
つまり、一部のデータベースとワークロードでは、データ ファイルを RAID 5 に、ログ ファイルを RAID 1/10 に置き、他のデータベースではすべてを RAID 1/10 に置くことができます。さらに、パーティション分割されたデータベースの場合は、読み取り専用データと読み取り/書き込みデータが混在している可能性があり、同じテーブル内にも存在する可能性があります。これを個別のファイル グループに分割し、各ファイル グループを適切な RAID レベルに配置することができます。
実際のデータベースの分離は、ワークロードと、基盤となる IO サブシステムの機能によって異なります。たとえば、SAN よりも個別の RAID アレイにデータを保存する場合は、より高いレベルの分離が必要になる場合があります。
Tempdb は、通常、負荷の高いデータベースであるため、他のデータベースとは別に保存する必要がある特殊なケースです。システム データベースは頻繁に使用すべきではなく、冗長性がある限りどこにでも配置できます。
以下は私が執筆に協力したホワイトペーパーへのリンクです。役に立つはずです。物理データベースストレージ設計また、IO サブシステムが予想されるワークロードを処理できることを確認してください。次のホワイトペーパーを参照してください。導入前の I/O のベスト プラクティス最後に、正しい RAID ストライプ サイズ (新しいシステムでは通常 64K 以上)、正しい NTFS アロケーション ユニット サイズ (通常 64K) を使用していること、および Windows Server 2008 より前のシステムではディスク パーティション オフセットが正しく設定されていることを確認します。これらの情報、およびこれらの詳細情報へのポインターと、これらの情報をこのように構成する必要がある理由については、次のブログ投稿を参照してください。ディスク パーティション オフセット、RAID ストライプ サイズ、および NTFS 割り当て単位は正しく設定されていますか?。
要点: ワークロードと IO サブシステムの機能を把握し、それに応じて実装します。
これがお役に立てば幸いです。
PS tempdbに関しては、どのように設定すべきかが大きな問題であり、さまざまな矛盾した情報があります。tempdbデータファイルの設定に関する包括的なブログ記事をこちらに書きました。TF 1118 に関する誤解。
答え3
私がセットアップしたサーバーに対する短い答えは常に
別々の物理ディスク、RAID 1 または 10 (ストライピング + ミラーリング) にログを保存します。
独自のディスク上のデータベース。パフォーマンスのニーズに応じて、通常は RAID5 を使用します。
RAID コントローラに大量のキャッシュがある
できれば、OS と Windows ページファイルを別のアレイ (通常はミラー (Raid 1)) に配置することをお勧めします。これにより、すべての書き込み操作が分離されるため、パフォーマンスの低下によってすべてが低下することはありません。
私が過去に経験したのは、データベース書き込み + ログ書き込み + ページファイル書き込みがあると、Raid5 アレイが停止し、パフォーマンスが急激に低下することです。問題は、テストや開発などではパフォーマンスが良好であるにもかかわらず、実稼働環境に移行して使用量が急増すると、この問題が「突然」発生し、ユーザーからの苦情が急増することです。
答え4
ここには私よりもはるかに優れた MSSQL の専門家がいますが、一般的には次のことをお勧めします。
OS とコードは C: にあります。これはローカル ディスクで、RAID1 アレイ ペアである必要があります。このために 2 x 2.5 インチ SAS 146GB 10krpm ディスクを使用していますが、2 x SATA 7.2 ディスクを使用することもできます。データは、必要なサイズの、かなり高速な (10krpm 以上) RAID 1/10、5/50/6/60 アレイ上に保存する必要があります。私たちはこれを FC SAN LUN 上に、通常は「tier 2」/10krpm ディスク グループ上に保持します。ログは、別の非常に高速な (15krpm) 小さな (10GB 以下?) RAID 1 アレイ ペア上に保存する必要があります。私たちはこれを FC SAN LUN 上に、通常は非常に小さな「tier1」/15krpm ディスク グループまたは「tier0」/ssd グループ上に保持します。
いずれにしても、パフォーマンスのためには、これらの各チャンクを別々のスピンドル/アレイに配置する必要があります。もちろん、すべてが 1 つのディスクで動作しますが、パフォーマンスとコストのバランスを求めているのだと思います。
マスター/tempdb は通常のデータベースと一緒に保存しますが、別のデータ アレイ LUN に分割することもできます。
お役に立てれば。