Tenho observado várias métricas de PerfMon em uma das instâncias do SQL Server de nosso cliente, tentando obter uma boa medida de onde nosso banco de dados (ou servidor) poderia usar melhorias.
Uma medida que me deixou intrigado é a proporção de duas métricas de PerfMon: Compilações/seg e Solicitações de lote/seg.
De acordo com esta postagem , " é uma regra geral que as compilações/s devem ser de 10% ou menos do que o total de solicitações de lote/s ".
Nosso aplicativo tem um serviço do Windows que invoca cálculos agendados no banco de dados a cada hora. Como um relógio, em meus dados PerfMon CSV, posso ver os picos em Compilações/s e Solicitações em Lote/s. O que eu não esperava ver era que o número de compilações/seg excederia as solicitações de lote/seg.
Estou analisando amostras de 15 segundos do PerfMon centradas no momento em que nossos cálculos começam:
O que isso normalmente indica? Isso faz sentido? Por que estaríamos compilando mais instruções do que executando? Estou esquecendo de algo?
Desculpe, não estou menosprezando o conselho de Thomas, mas, por favor, aceite as "regras gerais" com um pouco de sal, ou simplesmente jogue-as pela janela.
Linha de base.
O que é normal para o seu sistema? O sistema está respondendo bem?
Se não houver nenhum problema de desempenho, não tente comparar seu sistema com algum número que alguém tirou do ar ou potencialmente baseado em algum sistema e carga de trabalho muito específicos anos atrás, e largue tudo para tentar "consertá-lo".
Especificamente, solicitações e compilações em lote não têm uma correlação muito boa e prática em TODOS os cenários. Você precisa entender sua carga de trabalho antes de começar a entrar em pânico porque seus contadores atingiram algum limite que alguém colocou em um post em algum lugar. Se todos os seus lotes consistem em exatamente uma instrução, então sim, ter mais compilações/s do que solicitações em lote/s pode parecer fora do comum (mas ainda pode não indicar um problema ). Na maioria dos casos, você está enviando mais de um extrato em um lote. Se for esse o caso - e particularmente se você estiver usando coisas como ORMs ou muito SQL dinâmico altamente variável, onde sofrerá um grande número de compilações - eu realmente não ficaria surpreso em ver um contador mais alto que o outro .
Se você precisa fazer algo a respeito, nesse caso, é um problema completamente diferente.