症狀
如果使用 Microsoft SQL Server Service Broker 的應用程式設定為每個交談有一則訊息的訊息模式,您就會注意到 tempdb 資料檔案意外地成長。 這種模式類似於稽核應用程式中常用的「觸發即忘記」模式。
如果您在此問題發生時查詢sys.dm_db_task_space_usage動態管理檢視 (DMV) ,您可能會看到執行內部 Service Broker 工作之工作階段識別碼的 “internal_objects_dealloc_page_count” 值不會以與 “internal_objects_alloc_page_count” 相同的速率增加。
此外,即使關閉並清除所有擱置中的交談,tempdb 空間也不會被釋放。
原因
資料檔案的成長主要是由 sys.sysdesend 資料表的不斷插入和更新所導致。 在此情況下,tempdb 資料檔會隨著您使用 Service Broker 而持續增大。
解決方式
此問題已在 Microsoft SQL Server 2016 中修正。
累積更新資訊
SQL Server 2012 Service Pack 3 (SP3 的累積更新 5)
SQL Server 2014 SP1 的累積更新 10
關於 SQL Server 的累積更新
SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:
適用於 SQL Server 2012 SP3 的最新累積更新
適用於 SQL Server 2014 SP1/SP2 的最新累積更新
更多資訊
若要從 tempdb 回收未釋放的空間,請重新啟動 SQL Server 服務。
若要避免此問題,請遵循下列 TechNet 主題中「效能和延展性技術」一節中的一般建議:
狀態
Microsoft 確認這是 Service Broker 目前設計中的已知問題。