KB4042232 - 修复:如果在 SQL Server 中启用了缺少索引功能,则取消挂起的查询时出现访问冲突

应用对象
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2016 Service Pack 1 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 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 中创建一个临时表。

  • 运行存储过程所执行的查询,该查询满足以下条件:

    • 查询引用存储过程创建的临时表。
    • 查询具有任何索引未涵盖的 WHERE 子句,并且启用了缺少的索引功能。
  • 假设从多个实例并发调用存储过程。 然后,会频繁创建和删除临时表,这会导致频繁创建和删除缺失索引的相应记录。

  • 在这种情况下,如果取消了存储过程的挂起查询,可能会收到访问冲突错误。

解决方法

以下SQL Server累积更新中修复了此问题:

2017 SQL Server累积更新 2

SQL Server 2016 RTM 的累积更新 9

SQL Server 2016 SP1 的累积更新 6

SQL Server 2014 SP2 的累积更新 8

关于SQL Server的累积更新:

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

SQL Server 2017 的最新累计更新

SQL Server 2016 年的最新累积更新

SQL Server 2014 年的最新累积更新

解决方法

此问题的解决方法是启用跟踪标志 (TF) 2392 ,这将禁止收集缺少的索引。

详细信息

若要获取有关缺少索引功能的详细信息,请参阅以下链接:

缺少索引功能

状态

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

参考资料

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