Sql-Server-2005
碎片整理或備份+還原
我有一個 MDF 文件,它以 10% 的增量從 1MB 自動增長到 40GB。該文件現在非常碎片化,我想以最少的停機時間對其進行碎片整理。
我有一個我不確定是否可行的計劃:
- 通常在服務仍在執行時對分區進行碎片整理,直到唯一的碎片文件是數據庫文件。
- 進入單使用者模式。
- 完全備份到不同的分區。
- 刪除帶有碎片 MDF 文件的數據庫。
- 從最近創建的備份創建/恢復新數據庫。
刪除數據庫然後從備份中恢復會刪除文件碎片嗎?
或者我應該關閉服務並執行碎片整理工具直到它完成?
在 ServerFault上對這個主題進行了很好的討論,其中討論了 3 種形式的碎片。在發布問題之前,我總是要提醒自己尋找答案,因為它可以節省我很多時間。
簡短回答(tl/dr):
它將刪除日誌文件中的物理碎片,但不會刪除邏輯碎片或 VLF 碎片。
物理碎片:
備份和恢復將消除任何物理碎片。也就是說,NTFS 分區上發生的碎片是由於您的數據庫隨著時間的推移而逐漸增長,因此導致連續空間不可用。
其他碎片化:
您仍然會在數據庫中出現索引碎片和VLF 碎片。Paul Randall 在他的SQLSkills Immersion Events中強調不使用 Windows Defrag ,以及它如何導致數據庫損壞,所以我認為您走在正確的軌道上。
背景:
物理碎片會在 MDF/NDF/LDF 文件佔用的磁碟上進行操作。由於 SQL Server 不會跟踪此資訊,因為它是無用的。只要有空間,我們希望能夠將數據庫恢復到任何硬碟驅動器,除非您寫得很短,否則我們不太關心它在磁碟上的位置……但這是規則的例外.