Sintomi
In Microsoft SQL Server 2016 o SQL Server 2017 su Windows le prestazioni potrebbero ridursi nelle condizioni seguenti:
- Quando si eseguono più operazioni INSERTSELECT simultanee in tabelle temporanee.
- Quando si esegue una query sys.dm_os_waiting_tasks. In questa situazione, la colonna resource_description mostra le attese nelle pagine PFS (Page Free Space) per più richieste.
Causa
Il parallelismo INSERT per le operazioni INSERTSELECT è stato introdotto in SQL Server 2016 o SQL Server 2017 in Windows. Gli INSERT nelle tabelle temporanee locali (solo quelle identificate dal prefisso # e non le tabelle temporanee globali identificate da ## prefissi) sono ora abilitati automaticamente per il parallelismo senza dover designare il suggerimento TABLOCK richiesto dalle tabelle non temporanee.
Anche se il parallelismo INSERT migliora in genere le prestazioni della query, se è presente un numero significativo di operazioni INSERTSELECT temporanee di tabella simultanee, la contesa può essere significativa rispetto alle pagine PFS. In alcuni casi, ciò può causare una riduzione generale delle prestazioni.
Risoluzione
Il problema è stato risolto per la prima volta in SQL Server 2016 Service Pack 1. Dopo aver applicato SQL Server 2016 SP1, gli INSERT paralleli in INSERT. La funzione SELECT per le tabelle temporanee locali è disabilitata per impostazione predefinita, riducendo i conflitti nella pagina PFS e migliorando le prestazioni complessive per il carico di lavoro simultaneo. Se si desidera inserire INSERT paralleli a tabelle temporanee locali, gli utenti devono utilizzare l'hint TABLOCK durante l'inserimento nella tabella temporanea locale.
Se è stato abilitato il flag di traccia 9495 menzionato nella sezione relativa alla soluzione alternativa, è consigliabile disabilitare e rimuovere il flag di traccia dopo aver applicato SQL Server 2016 SP1 poiché il flag di traccia 9495 disabilita l'inserimento parallelo indipendentemente dal suggerimento TABLOCK.
Informazioni sull'aggiornamento cumulativo
Questo problema è stato risolto nel seguente aggiornamento cumulativo per SQL Server 2016:
Informazioni sugli aggiornamenti cumulativi per SQL Server