Recentemente começamos a usar sp_BlitzCache para nos ajudar a ajustar nossas consultas. Encontramos um SP com alguns problemas e conseguimos refatorá-lo com sucesso.
Eu tenho uma cópia da saída de sp_BlitzCache tirada durante a semana antes de ajustarmos a consulta, ela está disponível aqui
https://drive.google.com/open?id=1oiAEl62ZT51qcCEhVzkg8oDA3HB-NCsv
O comando executado para gerar esta saída foi
exec sp_BlitzCache @StoredProcName = 'hs_UpdateShipmentPackagesAndWeightSp'
Algumas perguntas
1) Percebi que temos várias linhas para o mesmo identificador de plano, por que isso?
2) Você notará que a consulta de custo mais alto (1451) tem um texto de consulta de toda a instrução do procedimento de criação, o que isso significa? As métricas para esta linha são apenas para a criação do procedimento armazenado?
3) Para a linha de custo mais alto, a mencionada acima, ela tem uma concessão Mín./Máx de quase 2 GB. Isso significa que, quando executamos a instrução de procedimento de criação, ela pediu 2 GB de memória? Ou este plano está sendo usado quando o proc é chamado? Suponho que isso esteja relacionado à resposta da pergunta 2
4) Por que em alguns casos temos Min/Max grant KB > 0 e Min/Max usado grant kb > 0, mas porcentagem de memory grant usada é null ?
Estamos executando o SQL Server 2012.
Obrigado, Kevin
Reformulou um pouco suas perguntas:
P: Por que várias linhas para o mesmo identificador de plano?
R: Porque um plano pode incluir várias declarações.
P: Por que um proc tem várias linhas em sp_BlitzCache?
Semelhante ao acima: porque um proc armazenado pode ter várias instruções nele. Você verá uma linha para as métricas de todo o proc e uma linha para cada instrução nela.
P: Quando vejo "CREATE PROC", isso significa que o proc foi criado?
Não, é assim que o SQL Server armazena as consultas em um procedimento armazenado. Ele mostra o conteúdo do proc.
P: Por que a memória concedida é diferente da memória usada?
Porque a concessão é calculada antes que a consulta comece a usar a memória. É como você pedir dinheiro para ir à loja - você pode não usar toda a memória se eles não tiverem todas as coisas que você queria na loja. Você pode acabar usando apenas parte do seu dinheiro.