Симптоми
В Microsoft SQL Server 2016 или SQL Server 2017 на Windows може да изпитате понижена производителност при следните условия:
-
Когато изпълнявате няколко едновременни операции INSERTSELECT във временни таблици.
-
Когато правите заявка sys.dm_os_waiting_tasks. В този случай колоната resource_description показва чака на страница свободно пространство (PFS) страници за множество заявки.
Причина
Паралелизмът на INSERT за операциите на INSERTSELECT е въведен в SQL Server 2016 или SQL Server 2017 на Windows. INSERTs в локални временни таблици (само тези, идентифицирани от префикса #, а не глобалните временни таблици, идентифицирани от префикси ## ) сега са автоматично разрешени за паралелизъм, без да се налага да посочвате подсещането за TABLOCK, че не са временни таблици.
Въпреки че insert parallelism обикновено подобрява производителността на заявката, ако има значителен брой едновременни операции за временна таблица INSERTSELECT, разсъединението може да е значително спрямо PFS страниците. В някои случаи това може да доведе до общо намаляване на производителността.Решение
Проблемът първо е коригиран в SQL Server 2016 Service Pack 1. След като приложите SQL Server 2016 SP1, Parallel INSERTs в INSERT.. НАСТРОЙКАТА SELECT до локални временни таблици е забранена по подразбиране, което намалява разтежението на страницата PFS и подобрява общата производителност за паралелно работно натоварване. Ако се иска паралелни INSERTs с локални временни таблици, потребителите трябва да използват подсказване за TABLOCK, докато вмъкват в локална временна таблица. Ако сте разрешили флаг за проследяване 9495, споменат в раздела за заобиколно решение, се препоръчва да забраните и премахнете флага за проследяване след прилагане на SQL Server 2016 SP1, тъй като флаг за проследяване 9495 забранява паралелното вмъкване независимо от подсещането за TABLOCK.
Информация за кумулативна актуализация
Този проблем е коригиран в следната кумулативна актуализация за SQL Server 2016:
За кумулативните актуализации за SQL Server