2

新しいデータを定期的に配信するレポート アクティビティがいくつかあります。現在の戦略は、古いデータを削除してから新しいデータを挿入することです。範囲クエリを使用して、一定期間にわたってレポート データをバッチで移動します。

ここで行っているのは、増え続ける数値に追加しているだけなので、挿入のパフォーマンスは優れているはずです。datetime2(7)データ型sysdatetime()をデフォルト値として使用しています。

ただし、断片化の問題が心配です。

古いデータが最初に書き込まれますが、最終的にはそのデータが削除され、新しいデータ (このデータを置き換える) が末尾に追加されます。

データが更新されると、データは効果的に将来に移行するはずです。

すべての古いデータを完全に除外して、最終的に削除します。

断片化についてまだ心配する必要がありますか? これは優れたパフォーマンスを発揮すると思いますが、SQL Server が削除されたスペースを再利用できないのではないかと心配しています。

4

1 に答える 1

1

クラスタ化されたインデックス順に挿入および削除することを理解しています。このデザインは非常に合理的です。挿入によって削除されたページが再利用されるため、しばらくすると挿入時に断片化が発生する可能性があります。単一のページが解放されない、または挿入に使用される範囲内に他のその他のページが存在するなどの異常が発生する可能性があります。その意味で、断片化は確率過程としてより多くの断片化を引き起こします。

断片化がないことを保証する唯一の方法は、データを大まかにパーティション分割し、各パーティションを新しいファイルグループに配置することです。これにより、挿入が常にファイルの最後にあることが保証されます(他に挿入する場所はありません)。また、削除すると、最終的にパーティション全体が削除の対象になります。

非クラスター化インデックスはありますか?それらも断片化する可能性があります。

于 2012-08-25T11:18:58.410 に答える