4

いくつかのテーブルでデータ管理プロセス (データのアーカイブ化) を改善するタスクを割り当てられました。テーブルは 200 GB のようです。

テーブルのパーティション分割とベストプラクティスについて読んでいますが、今知っている限り、プロセスは次のようになります

  • ファイル グループとファイルを作成する
  • パーティショニング関数を作成する
  • パーティショニング スキーム - (間隔を適切なファイル グループにマップします)
  • クラスター化インデックスを再作成します - これは、テーブルが物理的に別のファイルに移動された瞬間です
  • 利益 :)

しかし、この時点で既存の非クラスター化インデックスで何が起こっているのか、1 つの情報を見つけることができません。ここから:http://technet.microsoft.com/en-us/library/ms187526(v=sql.105).aspx 私が見つけた

パーティション化されたインデックスは、ベース テーブルとは別に実装できますが、通常は、パーティション化されたテーブルを設計してからテーブルにインデックスを作成するのが理にかなっています。これを行うと、SQL Server はテーブルと同じパーティション スキームとパーティション列を使用して、インデックスを自動的にパーティション分割します。その結果、インデックスは基本的にテーブルと同じ方法でパーティション化されます。これにより、インデックスがテーブルに揃えられます。

そしてもう一つ

一意の非クラスター化インデックスをパーティション分割する場合、インデックス キーにはパーティション分割列が含まれている必要があります。一意でない非クラスター化インデックスをパーティション分割する場合、SQL Server は既定でパーティション分割列をインデックスの非キー (含まれる) 列として追加し、インデックスがベース テーブルと一致するようにします。パーティション分割列がインデックスに既に存在する場合、SQL Server はその列をインデックスに追加しません。

しかし、これは私の問題を参照していませんが、定義にパーティション列がある/ない既存の非クラスター化インデックスに対して明示的にパーティション関数を作成する必要がありますか?

次のようなテーブルがあるとしましょう

テーブル A - col1 col2 col3

col1 にクラスター化されたインデックスを使用し、プライマリ パーティションの col3 にクラスター化されていない

パーティション分割後に col3 の非クラスター化インデックスで何が起こるか、それはテーブルと整列するのか、それとも PRIMARY パーティションに存在するのか

4

2 に答える 2

3

インデックスを揃える必要があります。この方向にあなたを引っ張る2つの主な力があります:

  • 高速パーティション切り替え操作には、整列されたインデックスが必要です。大規模なデータ セットを処理する場合、古いデータ (必要な保持期間を過ぎたデータ) を削除することは、新しいデータを追加することと同じくらい重要です。パーティション切り替え操作は、古いデータを削除する最も効率的な方法です。分割されたテーブルに自動スライディング ウィンドウを実装する方法を参照してください。

  • クエリ プロセッサは、整列されたインデックスを好み、整列されていないインデックスを嫌います。たとえば、メモリの制限とパーティション インデックスを参照してください。

整列インデックスと非整列インデックスの両方で、SQL Server がマルチプロセッサ コンピューターのビルド操作に並列度を適用している場合、メモリ要件が大きくなる可能性があります。これは、並列度が高いほど、必要なメモリーが大きくなるためです。たとえば、SQL Server で並列度が 4 に設定されている場合、100 個のパーティションを持つ非整列パーティション インデックスでは、4 つのプロセッサが同時に 4,000 ページ、つまり 16,000 ページを並べ替えるのに十分なメモリが必要です。パーティション化されたインデックスが整列されている場合、メモリ要件は、40 ページ、つまり 160 (4 * 40) ページを並べ替える 4 つのプロセッサに削減されます。

あなたの場合、これはパーティション化列を各非クラスター化インデックスに明示的に追加し、ベース テーブル (クラスター化インデックス) と同じパーティション スキームで各非クラスター化インデックスを宣言することを意味します。非クラスター化インデックス用に別のパーティション関数/スキームを作成しようとしないでください。各インデックスにパーティショニング列を追加すると、データ モデルに深い影響があります。パーティショニング列を含まない主キー制約を宣言することはできなくなります (そして、これは、パーティショニングれたテーブルを参照するすべての外部キー定義に波及します!) しかし、これは、パーティショニングを解決方法については、「テーブル パーティショニングを使用する必要があるかどうかを決定する方法」を参照してください。

于 2012-08-07T08:44:17.423 に答える
2

一般的に言えば、通常はすべての非クラスター化インデックスを削除し、新しいスキームで再作成します。これにより、クラスター化インデックス (および行データ) と同様の方法で、テーブル パーティション間でそれらが分割されます。

これを行わないと、元のファイル グループ (プライマリまたは任意の場所) に置かれたままになります。

于 2012-08-07T08:25:31.273 に答える