最近縮小されたデータベースがあり、sp_spaceusedを実行すると、500MBの未割り当て領域があることがわかります。このデータベースを特定のサイズに維持しようとしています(デスクトップユーザーのMSDEサイズ制限を適用します)が、未割り当て領域がデータベース全体のサイズに影響するかどうかわかりません。この未割り当て領域をデータベースから削除する方法はありますか?
データファイルの縮小の実行には十分注意してください。使用するアルゴリズムが原因でインデックスの断片化が発生します(私はMSでコードを所有していました)。私が書いたこのブログ投稿には、私が何を意味するかを示すサンプルスクリプトが含まれています 自動縮小–オフにしてください! 。ブログ投稿のタイトルは自動縮小に関するものですが、手動のデータファイル縮小ではSQL Serverとまったく同じコードが使用されるため、同じ問題が発生します。
カイルが言うように、TRUNCATEONLYオプションのみを使用している場合、データの移動は行われず、断片化も発生しません。
データベースにインデックスがある場合、2つのオプションがあります。
お役に立てれば!
DBCC SHRINKFILE を参照してください
SqlACIDは正しく、TRUNCATEONLYまたはtarget_sizeを具体的に見てください
なぜ縮小したいのですか?データベースは、より多くのデータがデータベースに格納されるにつれて大きくなる傾向があります。それは彼らの本質です。データファイルに未使用のスペースがあることには何の問題もありません。実際、SQLはファイルにいくらかの空き領域を必要とします。
縮小すると大規模な断片化が発生し、次にデータが追加されたときにデータファイルが再び大きくなります。その場合、ファイルが展開されるにつれてシステム全体の速度が低下します(特に、インスタント初期化がオンになっていない場合)。また、縮小と拡大を繰り返すと、ファイルシステムレベルで断片化が発生し、修正が困難になります。
150 GB程度の巨大な未割り当て領域が表示された場合は、縮小することをお勧めします。 sp_spaceusedがhighunallocatedと言っているケースを1つ見ましたが、DBCCSHRINKFILEは役に立ちません。それで、そのシナリオでターゲット側を使用する必要があるか、または強制的に言わなければなりませんか