Příznaky
V Microsoft SQL Server 2016 nebo SQL Server 2017 ve Windows můžete zaznamenat snížení výkonu za následujících podmínek:
-
Při spuštění více souběžných operací INSERTSELECT do dočasných tabulek.
-
Při dotazování sys.dm_os_waiting_tasks. V takovém případě sloupec resource_description zobrazuje čekání na stránkách PFS (Page Free Space) pro více požadavků.
Příčina
Paralelismus INSERT pro operace INSERTSELECT byl zaveden v SQL Server 2016 nebo SQL Server 2017 ve Windows. Funkce INSERT do místních dočasných tabulek (pouze těch, které jsou identifikovány předponou # a nikoli globální dočasné tabulky identifikované předponami ##) jsou nyní automaticky povoleny pro paralelismus bez nutnosti označit nápovědu TABLOCK, kterou vyžadují jiné než dočasné tabulky.
I když paralelismus INSERT obvykle zlepšuje výkon dotazů, pokud existuje velký počet souběžných operací INSERTSELECT dočasných tabulek, může být kolize u stránek PFS významná. V některých případech to může způsobit celkové snížení výkonu.
Řešení
Tento problém je poprvé opravený v aktualizaci Service Pack 1 SQL Server 2016. Po použití SQL Server 2016 SP1 paralelní INSERTs v INSERT.. Funkce SELECT pro místní dočasné tabulky je ve výchozím nastavení zakázaná, což snižuje kolize na stránce PFS a zlepšuje celkový výkon souběžných úloh. Pokud je potřeba použít paralelní funkce INSERT k místním dočasným tabulkám, měli by uživatelé při vkládání do místní dočasné tabulky použít nápovědu TABLOCK.
Pokud jste povolili příznak trasování 9495 uvedený v části alternativního řešení, doporučujeme po použití aktualizace SQL SERVER 2016 SP1 zakázat a odebrat příznak trasování, protože příznak trasování 9495 zakazuje paralelní vkládání bez ohledu na nápovědu TABLOCK.
Informace o kumulativní aktualizaci
Tento problém byl opraven v následující kumulativní aktualizaci pro SQL Server 2016:
Informace o kumulativních aktualizacích pro SQL Server