Sql-Server
“tempdb”的磁碟大小注意事項 - 每年大幅增長兩次
我有一個 HR 軟體,HR 部門的一名員工在該軟體上每年大約執行兩次冗長而復雜的分析和計算。正因為如此,它
tempdb
正在增長到 500GB 甚至更多。什麼是好的磁碟大小調整解決方案?因為今年剩下的時間
tempdb
不是那麼大。細節
- SQL Server 版本和相關版本均為 2017 Standard。
tempdb
和數據庫在同一個分區D:
,日誌文件在不同的分區E:
- HR 數據庫本身大約有 78GB。
“真正”的答案是:與 HR 和/或他們的軟體供應商合作,修復或改進他們每年兩次的工作,這樣他們就不會那樣做。
假設這是不可能的,那麼你就剩下
兩個三個糟糕的選擇:
- 讓 tempdb 一年到頭都很大。
- 在磁碟上留出足夠的空白空間,以便 tempdb 可以變得巨大,然後立即將其縮小。
- 與系統協調,在處理之前添加磁碟空間,然後縮小 tempdb 並恢復磁碟空間。
1 和 2 在功能上幾乎相同,儘管我傾向於使用 2(以防供應商在過去 6 個月的某個時候採取行動並在您不知情的情況下修復了他們的處理工作)。
究竟如何進行 #3 將取決於許多技術細節,這些細節會因您的環境而異。我會考慮的一種方法是:
- 在處理之前,向伺服器添加一個大的臨時驅動器(比如z:)
ALTER DATABASE tempdb MODIFY FILE
為每個 tempdb 文件執行一次,同時指定**z:**上的新位置和更大的文件大小- 重新啟動 SQL 以使該更改生效(SQL 每次重新啟動時都會重新創建 tempdb)
- 讓 tempdb在處理期間在z:上使用所需的空間
- 處理完成後,重新執行
ALTER DATABASE tempdb MODIFY FILE
將 tempdb 重定向回原來的驅動器(和原來較小的大小)- 再次重啟 SQL 以使更改生效
- 刪除/刪除現在空的磁碟
在我們的環境中,這是更可取的,因為(使用我們特定的 SAN/虛擬化配置),添加和稍後刪除驅動器恰好比擴展現有驅動器和(尤其是)縮小現有驅動器要容易得多。(如果我沒記錯的話,縮小現有驅動器實際上需要提供一個全新的磁碟並遷移數據)。但是您的里程可能會因您的配置而異。