症状
如果将使用 Microsoft SQL Server Service Broker 的应用程序配置为对每个对话中的一条消息使用消息模式,则会发现 tempdb 数据文件出现意外增长。 此模式类似于审核应用程序中通常使用的 "火灾和忘掉" 模式。如果在出现此问题时查询 sys.dm_db_task_space_usage 动态管理视图(DMV),则你可能会看到 "internal_objects_dealloc_page_count" 值不会以与运行内部 Service Broker 任务的会话 id 的 "internal_objects_alloc_page_count" 相同的速率增加。此外,即使关闭并清理了所有挂起的对话,也不会释放 tempdb 空间。
原因
数据文件的增长主要由sysdesend 表的常量插入和更新引起。 在这种情况下,当你使用 Service Broker 时, tempdb 数据文件将继续增长。
解决方案
此问题已在 MICROSOFT SQL Server 2016中修复。
累积更新信息
Sql server 2012 的累积更新 5 Service Pack 3 (SP3) 累积更新10(适用于 sql server 2014 SP1)累积更新 3 sql server 2014 SP2
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL server 的最新累积更新: sql server2012 SP3 的最新累积更新SQL server 2014 SP1/SP2 的累积更新
更多信息
若要从 tempdb回收 unreleased 空间,请重新启动 SQL Server 服务。若要避免此问题,请按照以下 TechNet 主题的 "性能和可伸缩性技术" 部分中的常规建议进行操作:
状态
Microsoft 确认这是当前的 Service Broker 设计中的已知问题。