KB3180087 – Slabý výkon při spuštění klávesy INSERT. Operace SELECT v systémech SQL Server 2016 nebo SQL Server 2017 ve Windows

Platí pro
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use)

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:

  • Když spustíte více souběžných operací INSERTSELECT do dočasných tabulek.
  • Při zadávání dotazu sys.dm_os_waiting_tasks. V této situaci se ve sloupci resource_description zobrazuje čekací doba na stránkách s volným místem na stránce pro více žádostí.

Příčina

Paralelismus INSERT pro operace INSERTSELECT byl zaveden v SQL Server 2016 nebo SQL Server 2017 ve Windows. Vložené hodnoty do místních dočasných tabulek (jenom ty, které jsou označené předponou #, a ne globální dočasné tabulky identifikované předponami ##) jsou teď automaticky povoleny pro paralelismus, aniž by bylo nutné určit nápovědu TABLOCK, kterou vyžadují nedočasné tabulky. 

I když paralelismus INSERT obvykle zlepšuje výkon dotazů, pokud existuje významný počet souběžných operací INSERTSELECT dočasných tabulek, může být kolize vůči stránkám 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 SQL Server 2016 Service Pack 1. Po použití aktualizace SQL Server 2016 SP1 se paralelní příkazy INSERT ve INSERT. SELECT do místních dočasných tabulek je ve výchozím nastavení zakázán, což snižuje kolizi na stránce PFS a zlepšuje celkový výkon pro souběžné úlohy. Pokud je požadováno paralelní vkládání do místních dočasných tabulek, 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 zakázat a odebrat příznak trasování po použití SQL Server 2016 SP1, protože příznak trasování 9495 zakáže paralelní vkládání bez ohledu na nápovědu TABLOCK.

Informace o kumulativní aktualizaci

Tento problém je opravený v následující kumulativní aktualizaci pro SQL Server 2016:

Informace o kumulativních aktualizacích pro SQL Server