Sql-Server
如何清除 SQL Server 中的臨時數據庫內容?
正如標題所暗示的,我將在 SQL Server 中清除我的臨時數據庫的內容。SolarWinds 正在生成嚴重警報,我想清除 tempdb 工作文件和工作表。
我怎樣才能做到這一點?我可以重新啟動 MSSQLSERVER 服務以清除內容嗎?
如果您確實覺得需要清除它,那麼是的,重新啟動 SQL Server 將清除它。但是,這可能是一個臨時解決方案,幾天后您將恢復到相同的狀態。重新啟動 SQL Server 是從 SQL Server 角度清除 tempdb 內容的唯一方法。另一種可能的替代方法是重新啟動在 tempdb 中創建對象的應用程序。
鑑於您提供的少量資訊,我們不可能知道最佳行動方案是什麼。需要考慮的一些事項:
- 僅僅因為 SolarWinds 說某事是一個問題並不一定意味著它是一個問題。許多監控工具都設置了預設值,這些預設值將為給定伺服器上 100% 預期的事情發送“關鍵”警報。例如,我希望 Dynamics AX SQL Server 觸發大多數監控工具的許多預設 tempdb 門檻值。如果沒有明顯的 tempdb 爭用並且沒有空間不足,那麼可能存在沒有什麼重要的。使用 SQL Server 的應用程序是否存在性能問題?有人抱怨性能嗎?如果不是,則 SolarWinds 警報沒有反映現實,可能需要調整門檻值。需要記住的一件事是,許多這些應用程序最初是在儲存速度慢得多的情況下進行編碼和測試的。如果您在 SSD 上安裝 tempdb,那麼它們可能會比 SolarWinds 決定使用什麼門檻值時可能使用的幾個鏡像本地 SCSI 磁碟承受更多的打擊。
- 您的 tempdb 大小是否合適?一些應用程序大量使用 tempdb,並且需要比其他應用程序通常使用的更多。如果 tempdb 空間不足,您可能只需要更大的文件用於 tempdb
- 每個處理器是否有一個 tempdb 數據庫文件,最多 8 個?
- 如果您使用的是 SQL Server 2014 或更早版本,是否啟用了跟踪標誌 1117 和 1118?如果沒有,請研究它們——如果您有一個使用大量 tempdb 的應用程序,您可能想要啟用這些(我看到您使用了 sql-server-2016 標記,所以這是為了其他讀者的利益) .
- 應用程序中是否存在導致其“洩漏” tempdb 對象的缺陷?如果 tempdb 表的數量和使用情況不斷攀升並且從未穩定過,那麼建議對此進行調查。
如果您無法抗拒縮小它的衝動,請使用 TRUNCATEONLY 縮小它。TRUNCATEONLY 可能會縮小很多,或者沒有 - 它只取決於最後使用的範圍在哪裡。如果將其縮小到指定大小,它將開始重新組織數據(即,將其分段),以便將數據從文件末尾移動到中間存在的任何空閒空間。為了做到這一點,它將需要鎖,並且您的使用者/應用程序可能會對性能產生重大影響。而且您永遠不知道重組這些數據需要多長時間。
如果您有更多資訊要添加到有關 SolarWinds 發出警報的確切指標的問題中,那將很有幫助。