Considere as perguntas abaixo. A única diferença é 1.000 vs 2.000 linhas retornadas.
SELECT TOP 1000 lwa.Message INTO #foo
FROM dbo.LogWidgetsAPI lwa (NOLOCK)
ORDER BY lwa.TimeStamp
vs
SELECT TOP 2000 lwa.Message INTO #foo
FROM dbo.LogWidgetsAPI lwa (NOLOCK)
ORDER BY lwa.TimeStamp
No entanto, 1.000 linhas são retornadas em menos de um segundo, enquanto a consulta com 2.000 linhas leva muito mais tempo.
O plano de consulta para a primeira consulta é razoavelmente simples:
mas a segunda consulta está usando paralelização:
O que usaria apenas 1k linhas mais forçaria a paralelização?
PS A tabela contém mais de 6 milhões de registros e a coluna TimeStamp é indexada.
De acordo com outros comentários, parece que o limite de custo para o paralelismo é muito baixo e está fazendo com que as consultas sejam paralelas mesmo quando o processo para fazer isso / reunir os fluxos faz com que seu processo demore mais.
Tente definir isso para 50 ou experimente números diferentes.
Além disso, vale a pena ler: https://www.brentozar.com/archive/2017/03/why-cost-threshold-for-parallelism-shouldnt-be-set-to-5/