Una query come quella qui sotto che è garantita per non restituire alcuna riga, impiega da 0 a 160 secondi su uno dei nostri server:
select col1, col2, col3
from tab1
where 0 = 1
Due settimane fa, questo è successo sei volte in un intervallo di 48 ore. La scorsa settimana la stessa query ha richiesto ~ 0 secondi. Ho registri degli SQL della nostra applicazione ma non ho ancora trovato sospetti. Inoltre, ho pensato che una query di tipo 0 / dove 0 = 1 non raggiungesse mai le pagine di dati, quindi dovrebbe essere resistente ai blocchi di dati a livello di riga / pagina / tabella? Lo schema non viene toccato da alcun SQL (noto).
Poiché il problema non è coerente e il server è molto carico, vorrei capire la teoria alla base di ciò che sta accadendo prima di collegare il profiler SQL. Altre query vengono eseguite senza problemi durante questi ritardi. Un problema noto nell'applicazione è un numero elevato di query SQL create dinamicamente: circa 200k query uniche di 850k query (registrate) totali per un periodo di 48 ore, può causare problemi come questo?
Il server esegue SQL Server 2005 Standard Edition, 96 GB RAM, dischi su SAN e 4 CPU / 16 core. I file di database e i filegroup sono ben ottimizzati e non dovrebbero essere un problema (ma stiamo esaminando questo separatamente).
Qualsiasi suggerimento su cui guardare è molto apprezzato.
Modifica: perfetto! Ho riprodotto la query per aggiungere il piano di esecuzione e sono stati necessari 1 minuto e 35 secondi. Ecco il piano di esecuzione e lo screenshot che mostrano la durata della query:

Modifica 2: dettagli tempo statistiche per una seconda corsa. Sembra essere costantemente lento in questo momento, quindi allegheremo profiler e 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.
