Se eu executar a seguinte consulta em nosso servidor de produção:
SELECT DISTINCT TOP 10
t.TEXT QueryName,
s.execution_count AS ExecutionCount,
s.max_elapsed_time / 100000 AS MaxElapsedTime,
ISNULL(s.total_elapsed_time / s.execution_count, 0) / 100000 AS AvgElapsedTime,
s.creation_time AS LogCreatedOn,
ISNULL(s.execution_count / DATEDIFF(s, s.creation_time, GETDATE()), 0) AS FrequencyPerSec
,s.plan_handle, s.plan_generation_num
FROM sys.dm_exec_query_stats s
CROSS APPLY sys.dm_exec_sql_text( s.sql_handle ) t
ORDER BY
s.max_elapsed_time / 100000 DESC
Minhas principais consultas são "criar procedimento ......." isso significa que o servidor sql recompila esse procedimento armazenado mais de uma vez?
Não, em relação à sua consulta, isso significa que este procedimento leva muito mais tempo do que outros
E
Periodicamente, o SQL Server recompila procedimentos ou suas instruções internas, é um comportamento pretendido dependendo da atividade do servidor, pressão de memória, comandos do usuário, opção RECOMPILE, quantidade de alterações de dados subjacentes e muito mais.
Atualizar:
As consultas são iniciadas a partir de CREATE PROCEDURE porque o sql server apresenta o corpo do SP dessa forma.
Você pode até detalhar as declarações internas do procedimento por esta consulta: