Uma consulta como a abaixo, garantida para não retornar nenhuma linha, leva de 0 a 160 segundos em um de nossos servidores:
select col1, col2, col3
from tab1
where 0 = 1
Duas semanas atrás, isso aconteceu seis vezes em um intervalo de 48 horas. Na semana passada, a mesma consulta levou ~ 0 segundos. Eu tenho logs dos SQLs do nosso aplicativo, mas ainda não encontrei nenhum suspeito. Além disso, eu pensei que uma consulta do tipo 0 / onde 0 = 1 nunca atingiu as páginas de dados, por isso deve ser resistente a bloqueios de dados de linha / página / tabela? O esquema não é tocado por nenhum SQL (conhecido).
Como o problema não é consistente e o servidor está sob uma carga muito pesada, eu gostaria de entender a teoria por trás do que está acontecendo antes de anexar o criador de perfil SQL. Outras consultas são executadas sem problemas durante esses atrasos. Um problema conhecido no aplicativo é um alto número de consultas SQL criadas dinamicamente - cerca de 200 mil consultas exclusivas de 850 mil consultas totais (registradas) durante um período de 48 horas, isso pode causar problemas como este?
O servidor está executando o SQL Server 2005 standard edition, 96 GB de RAM, discos na SAN e 4 CPUs / 16 núcleos. Os arquivos e grupos de arquivos do banco de dados estão bem otimizados e não devem ser um problema (mas estamos analisando isso separadamente).
Qualquer indicação para onde procurar é muito apreciada.
Edit: Perfeito! Reproduziu a consulta para adicionar o plano de execução e levou 1 minuto e 35 segundos. Aqui está o plano de execução e a captura de tela mostrando a duração da consulta:

Editar 2: detalhes do tempo das estatísticas para uma segunda execução. Parece ser consistentemente lento no momento, então anexaremos o profiler e o perfmon:
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 97402 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
