Sql-Server

數據庫空間不足

  • June 12, 2018

我的數據庫還有 16MB 的空間。

我曾經只是按照我的教導截斷,但我發現這些連結建議不要截斷:

http://www.sqlskills.com/blogs/paul/why-you-should-not-shrink-your-data-files/

http://blog.sqlauthority.com/2011/01/19/sql-server-shrinking-database-is-bad-increases-fragmentation-reduces-performance/

除了刪除表記錄之外,我還能在我的數據庫上做些什麼來減小大小嗎?我是 DBA 論壇的新手,我可能應該在發布之前四處尋找其他問題,但我很絕望,因為我擔心我的數據庫會出現故障。

如果您的數據庫有 16 MB 的可用空間,並且它所在的驅動器有足夠的可用空間,那麼不用擔心。只要有足夠的空間並且您沒有禁用數據庫的自動增長功能,那麼數據庫將在需要時增長數據文件。當然,您應該將數據文件的自動增長設置為一些實際的增量,平衡增長所需的持續時間和必須增長的頻率。1MB 或 10% 的預設值根本不現實,應該在很久以前就改變了。如果您啟用了即時文件初始化,您可以傾向於更大,但我不知道對您來說有什麼好的平衡。

您可以在此處檢查自動增長設置:

SELECT name, type_desc, size, growth, is_percent_growth
 FROM [database_name].sys.database_files;

理想情況下,您將創建具有足夠大小的數據庫以避免自動增長,因為此操作可能很昂貴(特別是如果您沒有即時文件初始化)並且可能會在增長事件期間阻止所有其他活動。您可能希望現在或在維護視窗期間手動展開文件,以避免在高峰活動期間發生這種情況。因此,您可以主動執行此操作(例如,將自動增長設置更改為 100 MB):

ALTER DATABASE [database_name] 
 MODIFY FILE (NAME = N'database_name_data', FILEGROWTH = 102400KB);

如果您的驅動器有 16 MB 的可用空間,那麼您需要以某種方式釋放一些空間,或者將數據庫移動到具有更多空間的驅動器。驅動器可能已被過度增長的日誌文件佔用,可能是因為您處於完全恢復模式並且從未進行過日誌備份。在這種情況下,您可以:

  1. 切換到簡單恢復模式,執行CHECKPOINT,然後DBCC SHRINKFILE使日誌大小合理。抵制將文件縮小到 1 MB 的誘惑;您不想與磁碟空間進行拉鋸戰。
  2. 保持完整,然後BACKUP LOG,然後DBCC SHRINKFILE具有與 (1) 相同的注意事項。

現在,也可能是您處於簡單模式並且日誌已經膨脹以支持一些非典型的大型事務。因此,您仍然可以毫無顧慮地執行 (1),但如果您要再次執行這些大型事務,或者不定期執行 (1) 或 (2),那麼您只是在“解決”暫時的問題。獲取更大的磁碟或使用完全恢復模式並更有效地管理您的日誌。

綜上所述,這只是一個猜測;也許您的驅動器實際上被一個大的(且無用的)頁面文件、您的 MP3 收藏或您上次度假的影片佔用。

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