SQL Server 收縮命令“estimated_completion_time”不斷上升
執行 SQL 2012 R2…
Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) - 12.0.5207.0 (X64) 標準版(64 位)
執行收縮命令
DBCC SHRINKDATABASE(databaseNameHere)
(是的,我知道這不應該定期進行,如果有的話……我們有一個 200 GB 的數據庫並清除了多年的數據,並且應該能夠回收大約 100 GB 的空間)
當我在 1.5 小時檢查任務的狀態時,它是 49.1xxx
percent_complete
。它已經執行了 2.5 小時……現在是 49.5xxx
percent_complete
。此外,就在過去 20 分鐘內,
estimated_completion_time
(在 中找到sys.dm_exec_requests
)已從 8,741,035 毫秒變為 9,385,086 毫秒…驅動器上仍有大量可用空間。這是一個沒有人使用的開發/測試數據庫……所以有什麼關係?為什麼估計的時間不斷增加?
我一直在
sp_who2 active
用來驗證沒有塊…
SHRINKDATABASE
並且SHRINKFILE
直到最後一刻才真正將空間釋放到磁碟:它必須首先在文件中移動所有內容(這是需要很長時間的部分)。為什麼進度看起來不是恆定的:空閒/已用空間分佈在一個大文件中,所以當它遇到一個空更新檔時它會“跳過”,當它遇到一個已用的部分時“減速”頁。
正如評論中提到的,我強烈建議使用
SHRINKFILE
而不是SHRINKDATABASE
,因為您可以控制每個單獨文件的目標大小,並給每個文件一個合理的目標。例如,我通常會嘗試在每個數據文件中留出 15-25% 的可用空間。