2012-04-25 214 views
2

我有一個數據庫,接近7演出。如果我看一下桌子的使用情況,它應該比那個少40美元。昨天我刪除了一個大的日誌表,但我的數據庫仍然說這是非常大的。數據庫佔用比表結合方式更多的空間

這裏是統計:

database_name database_size unallocated space 
Umbraco_Indoorpower 6911.56 MB 859.59 MB 

reserved data index_size unused 
31144 KB 26272 KB 3240 KB 1632 KB 

我跑了這一點:

DBCC SHRINKDATABASE (umbraco_indoorpower, 99); 

這得到了我的數據庫下降到2.3演出。儘管如此,方式太大了。

database_name database_size unallocated space 
Umbraco_Indoorpower 2302.44 MB 1.63 MB 

reserved data index_size unused 
30016 KB 26200 KB 3240 KB 576 KB 

我在猜測我不能釋放昨天刪除的日誌表中的所有空間。我實際跑了delete from tblLog。也許這是錯誤的做法。

有誰知道我怎麼可以騰出更多的空間?

+0

難道它是索引? – DOK 2012-04-25 18:09:02

+0

@DOK不,我不認爲這是由於索引。你看過上面的輸出了嗎? – 2012-04-25 18:40:03

+0

@Aaron Bertrand:我認爲你是對的。我正在考慮[這裏]解釋的情況(http://msdn.microsoft.com/zh-cn/library/ms191183.aspx),其中索引可以(希望暫時)佔用大量的磁盤空間。 – DOK 2012-04-25 19:11:42

回答

7

日誌文件有多大?什麼是你的恢復模式?上面的database_size數字很可能是將近7 GB的日誌和非常少的數據。找到您的硬盤驅動器上的文件 - 您可以使用定位路徑:

EXEC umbraco_indoorpower..sp_helpfile; 

我會打賭,LDF是巨大和MDF實際上是小的。在這種情況下,您可能處於FULL恢復模式,並且從未進行過日誌備份。如果這是真的,那麼你可以這樣做:

USE umbraco_indoorpower; 
GO 
BACKUP LOG umbraco_indoorpower TO DISK = 'C:\some_path\umbraco.trn'; 
GO 
DBCC SHRINKFILE(umbraco_indoorpower_log, 20); -- guessing on target MB size here 

(如果你在簡單恢復模式,上面會失敗,但會有一些其他的解釋了爲什麼日誌文件很大 - 如長期運行或未提交的交易,您的刪除提交了嗎?)

然後,您將希望(a)設置適當的維護,包括完整/差異/日誌備份,這將有助於實現日誌文件的最佳重用,或者)切換到簡單恢復,在這種情況下,日誌將自行管理。

在大多數情況下,簡單恢復在發生災難時不能提供足夠的保護,但這是由您決定的。

與此同時,您可以縮小所有您想要的文件,但如果您保持恢復模式和事務處理的方式,您只會看到文件再次增長,並且明天就會恢復運行縮小命令。這對你的文件來說是非常可怕的。這就是爲什麼我反對像「運行縮小操作」這樣的答案。我講一下爲什麼在這裏:

http://sqlblog.com/blogs/aaron_bertrand/archive/2009/07/27/oh-the-horror-please-stop-telling-people-they-should-shrink-their-log-files.aspx

1

現有的答案已經是相當不錯的。我有一個額外的解決方案:腳本數據庫包括數據(SSMS用戶界面可以輕鬆完成)並在新數據庫中執行腳本。

您可能也想切換到簡單的日誌模型(如果您沒有特別需要使用完整的日誌記錄模型)。有一件事是肯定的:您不能以完整模式運行,並且沒有正確的事務日誌管理。

+0

儘管我確實同意有時在大量數據更改後遷移到新數據庫更簡單,但不確定我同意簡單「可能」是更好的選擇。就我個人而言,我認爲保持完整並添加適當的事務日誌管理更爲安全。因人而異。儘管暫時切換到簡單並且恢復到完全可能有助於使現有日誌的轉儲變得更容易一些。 – 2012-04-25 22:24:42

+0

我推薦使用簡單模式,因爲OP現在似乎有* no * tlog管理。他當然可以實現這樣的事情,但也許他不需要或不想投入時間。 – usr 2012-04-25 22:32:07

+0

我明白,我不認爲使用簡單的一般建議是所有讀者的正確信息(請記住,您給出的答案不僅僅是OP)。 – 2012-04-25 22:34:17

0

在SQL Server中佔用更多空間的另一件事是Service Broker隊列。在我的情況下,我有600萬行隊列中佔用17GB ...