Príznaky
V Microsoft SQL Server 2016 alebo SQL Server 2017 vo Windowse sa môže vyskytnúť pokles výkonu za nasledujúcich podmienok:
- Keď spustíte viacero súbežných operácií INSERTSELECT do dočasných tabuliek.
- Pri zadávaní dotazu sys.dm_os_waiting_tasks. V tomto prípade resource_description stĺpec zobrazuje čakania na stránkach PFS (Voľné miesto na stránke) pre viaceré žiadosti.
Príčina
INSERT paralelizmus pre operácie INSERTSELECT bol zavedený v SQL Server 2016 alebo SQL Server 2017 vo Windowse. Funkcie INSERT do lokálnych dočasných tabuliek (iba tie, ktoré sú identifikované predponou #, a nie globálne dočasné tabuľky označené predponami ##) sú teraz automaticky povolené pre rovnobežnosť bez toho, aby bolo potrebné určiť tip TABLOCK, ktorý nedočasné tabuľky vyžadujú.
Hoci rovnobežnosť funkcie INSERT zvyčajne zlepšuje výkon dotazu, pri výskyte veľkého počtu súbežných dočasných operácií INSERTSELECT v tabuľke môže dôjsť k významnému rozporu voči stránkam PFS. V niektorých prípadoch to môže spôsobiť celkové zníženie výkonu.
Riešenie
Tento problém je prvýkrát opravený v balíku SQL Server 2016 Service Pack 1. Po použití SQL Server 2016 SP1 sa paralelné INSERTY nachádzajú vo funkcii INSERT. Príkaz SELECT to local temporary tables je predvolene vypnutý, čo znižuje obsah na stránke PFS a zlepšuje celkový výkon pri súbežnej pracovnej záťaži. Ak je potrebné paralelné vkladanie do lokálnych dočasných tabuliek, používatelia by mali pri vkladaní do lokálnej dočasnej tabuľky použiť tip TABLOCK.
Ak ste povolili príznak sledovania 9495 spomínaný v časti o alternatívnom riešení, odporúča sa po použití SQL Server 2016 SP1 zakázať a odstrániť príznak sledovania, pretože príznak trasovania 9495 zakazuje paralelné vkladanie bez ohľadu na tip TABLOCK.
Informácie o kumulatívnych aktualizáciách
Tento problém bol opravený v nasledujúcej kumulatívnej aktualizácii pre SQL Server 2016:
Informácie o kumulatívnych aktualizáciách pre SQL Server