症状
在 Windows 上的 Microsoft SQL Server 2016 或 SQL Server 2017 中,在以下情况下可能会遇到性能下降的情况:
-
在临时表中运行多个并发 INSERTSELECT 操作时。
-
查询sys.dm_os_waiting_tasks时。 在这种情况下, resource_description 列显示多个请求的页可用空间 (PFS) 页等待。
原因
WINDOWS SQL Server 2016 或 SQL Server 2017 中引入了 INSERTSELECT 操作的 INSERT 并行度。 本地临时表中的 INSERT 仅 (#前缀标识的表,而不是 ## 前缀) 标识的全局临时表,现在会自动启用并行度,而无需指定非临时表所需的 TABLOCK 提示。
尽管 INSERT 并行度通常可提高查询性能,但如果存在大量并发临时表 INSERTSELECT 操作,则争用对 PFS 页可能很大。 在某些情况下,这可能会导致整体性能下降。
解决方法
此问题首先在 SQL Server 2016 Service Pack 1中修复。 应用 SQL Server 2016 SP1 后,在 INSERT 中并行 INSERT。默认情况下禁用 SELECT 到本地临时表,这可以减少 PFS 页上的争用并提高并发工作负荷的整体性能。 如果需要与本地临时表并行 INSERT,则用户应在插入本地临时表时使用 TABLOCK 提示。
如果已启用解决方法部分中提到的跟踪标志 9495,建议在应用 SQL Server 2016 SP1 后禁用并删除跟踪标志,因为跟踪标志 9495 禁用并行插入,而不考虑 TABLOCK 提示。
累积更新信息
此问题已在以下 SQL Server 2016 累积更新中修复:
关于SQL Server的累积更新