Estou executando o Microsoft SQL Server 2016 SP2-CU6 (13.0.5292.0) em uma VM de 4 vCPU com max degree of parallelism
definido como 2
e cost threshold for parallelism
definido como 50
.
De manhã, ao tentar exibir um Plano de Execução Estimado para uma consulta SELECT TOP 100 , tenho grandes esperas e a operação para renderizar o plano estimado leva minutos, geralmente no intervalo de 5 a 7 minutos. Novamente, essa não é a execução real da consulta, é apenas o processo para exibir um Plano de Execução Estimado .
sp_WhoIsActive
mostrará PAGEIOLATCH_SH
esperas ou LATCH_EX [ACCESS_METHODS_DATASET_PARENT]
esperas e quando eu executar o script WaitingTasks.sql de Paul Randal durante a operação, ele mostrará CXPACKET
esperas com os threads de trabalho mostrando PAGEIOLATCH_SH
esperas:
* campo de descrição do recurso = exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen
Os threads de trabalho parecem estar trazendo a stats
tabela inteira para a memória (como esses números de página e os números de página subseqüentes mostrados na consulta de Paul Randal voltam para a chave em cluster da stats
tabela). Depois que o plano volta, é basicamente instantâneo pelo restante do dia, mesmo depois de ver a maior parte do stats
atrito da tabela do cache com apenas vários registros restantes (que eu assumo terem sido retirados devido à busca de operações de consultas semelhantes).
Eu esperaria esse comportamento inicial se a consulta estivesse realmente sendo executada com um plano que usasse operadores SCAN, mas por que está fazendo isso ao avaliar planos de execução apenas para chegar a um operador SEEK, como mostra o plano vinculado acima? O que posso fazer (além de executar esta declaração antes do horário comercial, para que meus dados sejam armazenados em cache adequadamente) para ajudar a melhorar o desempenho aqui? Estou assumindo que um par de índices de cobertura seria benéfico, mas eles realmente garantiriam alguma alteração no comportamento? Tenho que trabalhar dentro de algumas limitações da janela de armazenamento e manutenção aqui, e a própria consulta é gerada a partir de uma solução de fornecedor, para que outras sugestões (além de uma melhor indexação) sejam bem-vindas neste momento.