KB4341398 - 修复:AUDIT_LOGIN 和 AUDIT_LOGIN_FAILED 事件的事件通知将导致 TempDB 在 2016 SQL Server和 2017 中异常增长

应用对象
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1 SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

症状

假设你有一个脚本,该脚本将事件通知用于 Microsoft SQL Server 2016 和 2017 中的AUDIT_LOGIN和AUDIT_LOGIN_FAILED事件。 运行该脚本时,你将注意到 TempDB 的大小在快速增长。

可以使用以下查询来检查分配给 TempDB 内部对象的空间是否已正确解除分配。


SELECT *
FROM (
SELECT  TS.internal_objects_alloc_page_count , TS.internal_objects_dealloc_page_count, [Net Allocation MB] = CAST((TS.internal_objects_alloc_page_count - TS.internal_objects_dealloc_page_count) AS DECIMAL(15, 2)) / 128
  , TS.session_id
  , ER.command
FROM    sys.dm_db_task_space_usage TS
   INNER JOIN sys.dm_exec_requests ER ON ER.request_id = TS.request_id AND ER.session_id = TS.session_id
where TS.session_id < 50
) internal
where [Net Allocation MB] != 0

原因

出现此问题的原因是 SQL Server 2016 Service Pack 1 的累积更新 6 出现回归。

解决方法

此问题已在 SQL Server 的以下累积更新中修复:

SQL Server 2017 累积更新 10

SQL Server 2016 SP2 累积更新 2

SQL Server 2016 SP1 累积更新 10

关于 SQL Server 的累积更新:

SQL Server 的每个新累积更新都包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:

SQL Server 2017 的最新累计更新

SQL Server 2016 的最新累计更新

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

参考资料

了解 Microsoft 用于描述软件更新的术语。