web-dev-qa-db-ja.com

パーティション:ファイルとファイルグループを理解する

大きな履歴テーブルを分割しようとしています。パーティショニングに慣れていないので、 ファイルとファイルグループ の概念を理解しようとしていました。ファイルグループは、次の3つの方法で設定できます。

1. Each file group on different disk 
2. File groups on same disk
3. One file group on one disk with all files

[〜#〜] msdn [〜#〜] は、ディスクにRAIDが設定されている場合、最初の方法で並列I/Oアクセスを利用できるため、パフォーマンスが向上することを示しています。 2番目の方法 パフォーマンス上の利点はありませんが、各ファイルグループがファイルをデータベースの残りの部分から分離するため、メンテナンスが高速になります。 番目の方法 のパフォーマンス上の利点を検索しました。はっきりとした画像が得られませんでした。 3番目の方法では、ファイルがファイルグループに分割されていないため、メンテナンスに影響し、ダウンタイムが増加しますか? 2番目の方法よりもパフォーマンスが向上しますか?

2
kanu

3番目のオプションによって2番目のオプションよりもパフォーマンスが向上することはありません。考えてみると、すべてのユーザーオブジェクトをPRIMARYファイルグループに含めるのとほぼ同じです。 2番目のオプションで達成できるパフォーマンス上の利点の1つは、追加のデータ変更が予想されないことを確認し、インデックスが再構築され、統計が更新されたら、古い履歴ファイルグループに読み取り専用のフラグを立てることです。読み取り専用が実装されると、それらのファイルグループ内のデータをクエリするときにロックが問題になることはありません。

1
MattyZDBA

3番目の方法にはパフォーマンス上の利点はありません。私がこれを行うと考えることができる2つの理由があります:

  1. 後でファイルを複数のディスクに分散する予定です(オプション1に移動)
  2. 1つのファイルだけで割り当ての競合が発生します。これは、高負荷のtempdbでよくある問題です。ユーザーデータベースではまれです。

同じディスク上の複数のファイルは、ランダムでシーケンシャルなIOが少なくなるため、パフォーマンスに悪影響を及ぼします。これは、単一のパーティションがファイル間で簡単に分散(断片化)される可能性があるためです。

1
usr