Sql-Server-2005

碎片整理或備份+還原

  • January 14, 2022

我有一個 MDF 文件,它以 10% 的增量從 1MB 自動增長到 40GB。該文件現在非常碎片化,我想以最少的停機時間對其進行碎片整理。

我有一個我不確定是否可行的計劃:

  1. 通常在服務仍在執行時對分區進行碎片整理,直到唯一的碎片文件是數據庫文件。
  2. 進入單使用者模式。
  3. 完全備份到不同的分區。
  4. 刪除帶有碎片 MDF 文件的數據庫。
  5. 從最近創建的備份創建/恢復新數據庫。

刪除數據庫然後從備份中恢復會刪除文件碎片嗎?

或者我應該關閉服務並執行碎片整理工具直到它完成?

在 ServerFault上對這個主題進行了很好的討論,其中討論了 3 種形式的碎片。在發布問題之前,我總是要提醒自己尋找答案,因為它可以節省我很多時間。

簡短回答(tl/dr):

它將刪除日誌文件中的物理碎片,但不會刪除邏輯碎片或 VLF 碎片。

物理碎片:

備份和恢復將消除任何物理碎片。也就是說,NTFS 分區上發生的碎片是由於您的數據庫隨著時間的推移而逐漸增長,因此導致連續空間不可用。

其他碎片化:

您仍然會在數據庫中出現索引碎片VLF 碎片。Paul Randall 在他的SQLSkills Immersion Events中強調不使用 Windows Defrag ,以及它如何導致數據庫損壞,所以我認為您走在正確的軌道上。

背景:

物理碎片會在 MDF/NDF/LDF 文件佔用的磁碟上進行操作。由於 SQL Server 不會跟踪此資訊,因為它是無用的。只要有空間,我們希望能夠將數據庫恢復到任何硬碟驅動器,除非您寫得很短,否則我們不太關心它在磁碟上的位置……但這是規則的例外.

引用自:https://dba.stackexchange.com/questions/30329