Sintomas
No Microsoft SQL Server 2016 ou SQL Server 2017 no Windows, você pode ter um desempenho reduzido nas seguintes condições:
-
Ao executar várias operações INSSELECT simultâneas em tabelas temporárias.
-
Ao consultar sys.dm_os_waiting_tasks. Nessa situação, a coluna resource_description mostra esperas em páginas do PFS (Espaço Livre de Página) para várias solicitações.
Causa
O paralelismo INSERT para operações INSERTSELECT foi introduzido no SQL Server 2016 ou SQL Server 2017 no Windows. INSERTs em tabelas temporárias locais (somente aquelas identificadas pelo prefixo # e não por tabelas temporárias globais identificadas por prefixos ##) agora estão automaticamente habilitadas para paralelismo sem precisar designar a dica TABLOCK que as tabelas não temporárias exigem.
Embora o paralelismo INSERT normalmente melhore o desempenho da consulta, se houver um número significativo de operações INSERTSELECT de tabela temporária simultânea, a contenção poderá ser significativa em relação às páginas do PFS. Em alguns casos, isso pode causar uma diminuição geral do desempenho.
Resolução
O problema é corrigido pela primeira vez em SQL Server Service Pack 1 de 2016. Depois de aplicar SQL Server 2016 SP1, INSERTs paralelos no INSERT.. SELECT para tabelas temporárias locais é desabilitado por padrão, o que reduz a contenção na página PFS e melhora o desempenho geral da carga de trabalho simultânea. Se forem desejados INSERTs paralelos às tabelas temporárias locais, os usuários deverão usar a dica TABLOCK durante a inserção na tabela temporária local.
Se você habilitou o sinalizador de rastreamento 9495 mencionado na seção solução alternativa, é recomendável desabilitar e remover o sinalizador de rastreamento depois de aplicar SQL Server 2016 SP1, pois o sinalizador de rastreamento 9495 desabilita a inserção paralela independentemente da dica TABLOCK.
Informações sobre a atualização cumulativa
Esse problema foi corrigido na seguinte atualização cumulativa para SQL Server 2016:
Sobre atualizações cumulativas para SQL Server