Проблемы
В Microsoft SQL Server 2016 или SQL Server 2017 в Windows производительность может снизиться при следующих условиях:
-
При выполнении нескольких одновременных операций INSERTSELECT во временных таблицах.
-
При запросе sys.dm_os_waiting_tasks. В этом случае в столбце resource_description отображаются ожидания на страницах PFS для нескольких запросов.
Причина
Параллелизм INSERT для операций INSERTSELECT появился в Windows SQL Server 2016 г. или SQL Server 2017 г. InSERT в локальных временных таблицах (только те, которые определены префиксом #, а не глобальные временные таблицы, определяемые префиксами ##) теперь автоматически включаются для параллелизма без указания указания TABLOCK, необходимого для не временных таблиц.
Хотя параллелизм INSERT обычно повышает производительность запросов, при наличии значительного числа параллельных операций с временной таблицей INSERTSELECT состязание может быть значительным на страницах PFS. В некоторых случаях это может привести к общему снижению производительности.
Решение
Эта проблема впервые устранена в SQL Server 2016 с пакетом обновления 1 (SP1). После применения SQL Server 2016 с пакетом обновления 1 (SP1) в INSERT.. По умолчанию функция SELECT to local temporary tables отключена, что сокращает количество состязаний на странице PFS и повышает общую производительность параллельной рабочей нагрузки. Если требуется параллелизм INSERT с локальными временными таблицами, пользователи должны использовать подсказку TABLOCK при вставке в локальную временную таблицу.
Если вы включили флаг трассировки 9495, упомянутый в разделе обходного решения, рекомендуется отключить и удалить флаг трассировки после применения SQL Server 2016 с пакетом обновления 1 (SP1), так как флаг трассировки 9495 отключает параллельную вставку независимо от указания TABLOCK.
Сведения о накопительном пакете обновления
Эта проблема была исправлена в следующем накопительном обновлении для SQL Server 2016 г.:
Сведения о накопительных обновлениях для SQL Server