単一のファイルグループでのパーティション分割


10

データベースに非常に大きなテーブルがいくつかありますが、このデータのかなりの部分が「古い」ものです。

私の制御が及ばない状況のため、この「古い」データを削除することは許可されていません。その他の制限は、データベースを変更できないことです。つまり、データベースにファイルグループを追加できます。現在の状態では、すべてがPRIMARYファイルグループに存在しています。

これらのテーブルを「新しい」、「古い」、「アーカイブ」などのいくつかのパーティションに分割することを考えていました。この目的で使用したい「ステータス」列があります。

説明されているシナリオと制限を考えると、パーティション分割がここで意味をなすかどうか疑問に思っていました。つまり、テーブルがこのようにパーティション化されているが、すべてのパーティションが同じファイルグループにある場合、SQL Serverは、「新しい」データが存在する基になるファイル内の特別な領域を見つけるのに十分スマートであり、 「古い」データのあるエリア?

言い換えると、私のデータの80%が「古い」としましょう。SQL Serverには、基になるファイルの100%へのアクセスを回避し、「新しい」データを含む20%のみにアクセスするメカニズムがありますか(もちろん、WHEREクエリの句でパーティション列を指定するとします)。

私はこれに答えると思います、パーティションが内部でどのように実装されているかを理解する必要があります。私はどんなポインタにも感謝します。

回答:


6

同じファイルグループ内のテーブルをパーティション分割することには、2つの利点があります。

  1. 大きなインデックスの一部を段階的に再構築できるため、より効率的なメンテナンスが可能になります。ALTER INDEX [foo] REBUILD PARTITION=n詳細については、を確認してください。
  2. パーティションの排除と(場合によっては)パーティションレベルのロックを活用して、クエリのメンテナンスを改善します。私は私のブログでこれについて議論します。

パーティションを作成する場合は、いくつかの点に注意してください。

  • テーブルにクラスター化インデックスがある場合(実際にそうでなければなりません)、パーティション化キーはクラスター化インデックスの一部である必要があります。
  • パフォーマンスの問題を回避するには、パーティションを調整する必要があります。つまり、インクルードとして、またはインデックス自体の一部として、すべてのインデックスにパーティションキーを含める必要があります。
  • SQL Serverの現在のバージョン(2005〜2012)では、パーティションのインデックスの再構築はオフラインです。パーティションが大きく、パーティションごとに再構築すると、ブロッキングの問題が発生する可能性があります。

それを実装する前に、パーティション分割について徹底的に調査することをお勧めします。ケンドラリトルには、始めることができる優れたリソースのリストがあります。


クラスター化インデックスをパーティション化している場合、すべての非クラスター化インデックスにパーティション化列が行ロケーターとして含まれていませんか?
ジカート、

0

答えは「はい」です。パーティションを定義するために使用されるロジックに基づいて入力をフィルタリングするメカニズムがクエリにあります。

ただし、適切なフィルターが必要です。そうしないと、すべてのパーティションがスキャンされます。これには通常、パーティションを選択するための日付フィルター(あなたの場合)が含まれます。

これを強制する1つの方法は、ビューに適切なロジックを使用して、1つのパーティションのみにアクセスするビューを用意することです。


私は、パフォーマンスの向上は、同じ物理ディスクに分割するだろうどのくらいだろう...
sotn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.