Eu tenho uma consulta simples, como
select * from MyTable where MyTableID=@p1
onde sp_BlitzCache me avisa sobre "Long Running with Low CPU". A tabela possui um índice clusterizado em MyTableID, que é um identificador/GUID exclusivo.
Isso pode ser causado pela execução da instrução com muita frequência?
Sim, este é o Entity Framework, e estamos tentando torná-lo mais rápido, sem alterar muito o código C# (pois leva muito tempo).
Atualmente rodando em vCores = 80, e isso é "um pouco" caro. Tentei seguir https://www.brentozar.com/blitzcache/long-running-low-cpu/ , mas as diretrizes não são claras para mim.
sp_whoisactive mostra muitas instruções com Async_Network_IO
sp_BlitzFirst mostra CXSYNC_PORT como o principal tipo de espera, de longe, mas não consigo encontrar nenhuma informação sobre isso e não sei se está relacionado a esta consulta ou a uma das muitas outras consultas em execução .
Tentei encontrar um plano de execução, mas sp_BlitzIndex mostra apenas a instrução SQL. Mas, considerando isso, recebo este plano: https://www.brentozar.com/pastetheplan/?id=r11D40QQ0
Ele foi executado 13.441.177 vezes em meu servidor de teste que está ativo há 55 horas.
Por que recebo "CPU prolongada e baixa" e como faço para corrigir isso?
Também vejo INSERTs e UPDATEs simples recebendo esse rótulo.
Todos esses "tempos de baixa CPU" podem ser causados por um disco lento?
A espera CXSYNC_PORT é uma subcategoria da espera CXPACKET e sincronização de abertura/fechamento da porta de troca entre o thread de consumo e o thread de produção. Longas esperas aqui podem indicar carga do servidor e falta de threads disponíveis.
Você poderia tentar evitar o retorno de todas as colunas da tabela (*) como resultado da consulta, retornar apenas as colunas necessárias e criar um índice como o abaixo para suportar essa consulta.