web-dev-qa-db-ja.com

古いパーティションを縮小する

大規模なパーティション化された時系列テーブルがあり、各パーティションは独自のファイルに格納されています。それは時系列ベースのパーティション分割であり、新しいデータのみを保存しているため、一度にアクティブに書き込むパーティションは2つまでです。データがややランダムに入力されるため、インデックスでFILLFACTORを75に設定しています。

古いデータパーティションはかなりの領域を占有しており、その領域の約60〜70%しか使用していません。上記のパーティションのFILLFACTORを自動的に変更し、インデックスを再構築してファイルを圧縮することは可能ですか?私はそれらのパーティションにもう書いていないので、それらはサイズが元に戻るべきではありません。

4
m__

はい、可能です。ここに方法があります

  1. テーブルのコピーを作成します(そのためにパーティション管理ツールを使用できます: https://sqlpartitionmgmt.codeplex.com/
  2. 「圧縮」するパーティションをコピーに切り替えます
  3. FF = 100でコピーのインデックスを再構築します。
  4. パーティションを元のテーブルに戻します

これをSQLエージェントジョブで自動化することは、かなり簡単なはずです。

ステップ3は次の順序で行うのが最適です。

  • すべてのセカンダリインデックスを削除する
  • FF = 100でクラスターインデックスを再構築します。
  • FF = 100ですべてのセカンダリインデックスを再度作成します。

また、SQL Server Enterprise Editionを使用している場合は、PAGE圧縮でデータを圧縮できます。これには別のプロセスが必要です。

  1. 上記のようにそのテーブルのコピーを作成します
  2. 圧縮するデータをコピーに切り替えます
  3. 上記のようにインデックスを再構築してデータを圧縮します
  4. ALTER元のテーブルは、現在空のパーティション(切り替えたパーティション)でページ圧縮を有効にします
  5. SWITCH圧縮データを元のテーブルに戻します。

SQL Server 2014 Enteprise Editionでは、圧縮するパーティションで上記をオンライン操作として直接実行できます。ただし、通常はディスクのデータレイアウトが改善されるため、コピーのセカンダリインデックスを最初に削除することをお勧めします。

5
Thomas Kejser