質問

SQL Serverデータベースに70百万回以上のレコードが付いたテーブルがあり、そのテーブル(1回限りのもの)をドロップしてディスク上のスペースを解放しましたが、サイズはあまり変わらなかったようです。 DBを最小限に抑えることができると思います。

それはそれをする方法ですか?

SQL Server Management Studioを使用してShrinkを最後に行ったとき、完了するのに数時間かかりました。より速い方法はありますか?

enter image description here

役に立ちましたか?

解決

テーブルをドロップすると、データベース内のスペースが解放されますが、スペースをWindowsに戻しません。データベースファイルを縮小する必要があります。ただし、データベースファイルを完全にしたくありません。より多くのデータをロードすると、データファイルを頻繁に成長させる必要がないように、たくさんの空きスペースが必要です。これにより、物理ディスク上のデータファイルが断片化されます。

縮小をより速くすることに関しては、それをより速くする方法はありません。データベースを縮小するには、データベース内のデータのほとんどを読み取り、書き換えて、すべてのホワイトスペースをデータベースファイルからOSに戻すことができるようにする必要があります。このすべてのIOは時間がかかり、多くの断片化の問題を引き起こします。

他のヒント

DBCC Shrinkfileについて非常に注意深く読みたいと思います。

http://technet.microsoft.com/en-us/library/ms189493.aspx

一般に、データベースをディスク上の可能な限り小さなサイズに縮小したくありません。 SQL Serverを十分なスペースで残して、自動成長する必要がないようにします。ここの答えには多くの有用な情報があります:

https://stackoverflow.com/questions/4522719/to-dbcc-shrinkdatabase-or not-to-dbcc-shrinkdatabase-thats-the-question

縮小は非常に高価な手順であり、数時間かかる場合があります。最も効率的にスペースを使用するには、テーブルを前に前にクラスター化したインデックスを使用して新しいファイルグループに転送することができます。私は個人的にこれを好みます。なぜなら、これをいくつかのステップで「縮小」する方が簡単で、より予測可能であるため、計画しやすいからです。 DBCCの縮小を開始すると、どれくらいの時間がかかるかわかりません。

更新(それを指摘してくれたMrdennnyに感謝します):これは非常に具体的なアプローチであり、読み取り専用データベース(データウェアハウスなど)がある場合にのみ使用できます。一貫性のため。時間を節約して最大パフォーマンスを獲得するには、データベースを単純なリカバリモデルに切り替えてタブロックヒントを使用できます。これにより、システムは最小限のロギングを使用し、トランザクションログに文章をはるかに少なくすることができます。

この記事をご覧ください: http://itknowledgeexchange.techtarget.com/sql-server/deleting-lob-data-and-shrinking-the-database/

「私たちが思いついたソリューションは実際には非常に単純でした。データベースの削除を通常どおりに削除します。その後、データベースをバックアップして復元します。その後、収縮を行い、続いて、シュリンクが導入する断片化の問題を修正するためにクラスター化されたインデックスを再構築します。 。」

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top