2
我有一個非常大的表的數據庫。 (150 GB) 該表的主要內容是varbinary(max)列中的PDF文件。SQL Server - 刪除65%的內容 - 數據庫收縮好嗎?
現在,我們終於將大部分PDF文件從數據庫中移走了。 所以我現在的任務是更新表格並在100萬行的95%中將PDF設置爲NULL。
我使用這種方法來更新表。
將恢復模型設置爲簡單。
更新5000行的塊。 RAISERROR只是爲了讓我看到發生了什麼事情,因爲PRINT語句只是被緩衝,並且只在整個語句完成時才顯示。
我的問題是如下:
是不是還好我的事後收縮數據庫?
我知道這會導致索引碎片化,所以如果我之後運行索引優化器腳本,在這種情況下DB會縮小,這樣做很好;)?
DECLARE @msg AS nvarchar(200)
DECLARE @Stopper AS int = 1
DECLARE @IdRange AS int = 0
DECLARE @MaxId AS int = (SELECT MAX(ID) FROM EmailLog)
DECLARE @COUNT AS int = 5000
SET @IdRange = @COUNT
WHILE (@Stopper = 1)
BEGIN
UPDATE dbo.EmailLog
SET
PdfFile = NULL
WHERE InvoiceNo > 0 AND
Id BETWEEN @IdRange - @COUNT AND @IdRange
SET @IdRange += @COUNT
IF (@MaxId < @IdRange + @COUNT)
BEGIN
SET @Stopper = 0;
END
ELSE
BEGIN
SET @msg = 'Max @IdRange is now:' + CAST(@IdRange AS nvarchar(20))
RAISERROR(@msg, 0, 1) WITH NOWAIT
END
END
我認爲這裏的一個主要問題是:您預計數據庫有多快會再次增長(或根本?)。因爲當它再次發狂時,它將需要重新分配磁盤大小,否則它將被分配。 – Thomas
我已經在一個測試分貝上做了這個。它從135 GB變爲48 GB。所以是的,它會再次增長,但不會達到相同的規模,未來幾年=) – Gombi
好的。然後我沒有看到太多反對它。但讓我們看看是否有人提出了另一個點。 – Thomas