私は約のデータベースを縮小する必要があります。1TBから約700GBに減少します(これにより、拡張せずに200Gb以上の拡張が可能になります)。設定された増分(たとえば、1GB)でデータベースをループおよび縮小するスクリプトがあります。これは、進行状況が失われないため、いつでも中止する必要がある場合に非常に役立ちます。全体の縮小操作は4〜5日間実行される場合があります。問題は、データベースファイルを1ショット(1つのdbccシュリンクファイルを実行)で縮小すると、断片化が増えるかどうかです。ありがとう!!
2 に答える
(これはMS SQL Serverに基づいています。マイレージは他のRDBMSによって異なる場合があります。)
他のすべてが等しい場合、縮小プロセスを断片化することによって、より大きな断片化が発生することはないと思います。ファイルが縮小されると、SQLは、削除されるページから削除されない空のページに、内部でデータを移動する必要がある場合があります。ブロックA、B、およびCがX、Y、およびZに移動され、データベースファイルから消去された場合、3つのステップで実行すると、3つのステップで実行するのと同じくらいの断片化が生成される可能性があります。
私が見ている問題は、最初にブロックAを「縮小」し、ブロックBでの作業を開始する前に、より多くのデータが読み込まれ、データベースがブロックD(以前は空であったセクション)にデータを格納する場合はどうなるかということです。最終的な収縮の対象ですか?さらに悪いことに、新しいデータの追加でブロックAの再作成が必要になった場合はどうなるでしょうか。その後、ブロックAをもう一度縮小する必要があります。
これは、私が見た目と感触しか知らないことを説明するための高レベルの試みです。シュリンクセッションの間にデータベースが追加されただけの場合でも、複数のシュリンクによってさらに断片化が発生する可能性があると思います。セッションが少なければ少ないほど、おそらく良い結果が得られます。
「データベースを縮小しない理由、または縮小ボタンを押さない理由」の詳細については、以下のリンクを参照してください。
http://www.sqlskills.com/BLOGS/PAUL/post/Why-you-should-not-shrink-your-data-files.aspx http://sqlinthewild.co.za/index.php/2007/09 / 08 / shrinking-databases /
HTH、\ K