客戶需求:
這是乙個生產環境,在夜深人靜的時候發現 tempdb 已經超過500gb。
需求分析:
我們知道,如果重啟 sql server,tempdb 會自動重新建立,從而使 tempdb 回歸到初始大小。但是這是生產環境,不允許重啟 sql server。
嘗試:
直接收縮 tempdb,始終不成功。
use [tempdb]
go dbcc shrinkfile (n'tempdev' , 0, truncateonly) --釋放所有可用空間
go dbcc shrinkfile (n'tempdev' , 500) -- 收縮到 500mb
go解決方案:
sql server 2005 及後續版本為了增強 tempdb 的效能,會快取一些 iam 頁,以備將來重新使用這些頁面。在這種情況下,必須首先釋放 iam 頁,才能釋放其對應的頁面。因此,通過 dbcc freesystemcache,從所有快取中釋放所有未使用的快取條目,然後再收縮 tempdb 。
use [tempdb]
go dbcc freesystemcache ('all')
go dbcc shrinkfile (n'tempdev' , 500)
go 終於收縮到 500 mb。成功!
關於 dbcc freesystemcache,請參考
收縮資料庫
sql 2008 右擊要清除日誌的資料庫 選擇 屬性 在資料庫屬性中 選擇 選項 在右邊 恢復模式 下拉列表框中 選擇 簡單 單擊確定 返回 右擊要清除日誌的資料庫 選擇 任務 收縮 資料庫 單擊確定 完成收縮 指令碼 use master goalter database dnname set r...
收縮資料庫
顯示當前資料庫的空間使用情況 exec sp spaceused 顯示表的空間使用 exex sp spaceused objname wct updateusage true 顯示整個伺服器中所有資料庫的日誌使用情況 dbcc sqlperf logspace 收縮資料庫 dbcc shrinkd...
資料庫 收縮
引用 資料庫中的每個檔案都可以通過刪除未使用的頁的方法來減小。儘管資料庫引擎會有效地重新使用空間,但某個檔案多次出現無需原來大小的情況後,收縮檔案就變得很有必要了。資料和事務日誌檔案都可以減小 收縮 可以成組或單獨地手動收縮資料庫檔案,也可以設定資料庫,使其按照指定的間隔自動收縮。檔案始終從末尾開始...