Uno dei nostri clienti è appena passato a un nuovo server.
Per una particolare procedura memorizzata la prima volta che la si esegue, l'esecuzione richiede più di tre minuti. Le esecuzioni successive sono meno di 1 secondo.
Questo mi porta a credere che i primi tre minuti siano occupati principalmente nel calcolo del piano di esecuzione. Le esecuzioni successive utilizzano quindi il piano memorizzato nella cache ed eseguono istantaneamente.
Nei nostri database di test sono necessari circa 5 secondi per calcolare il piano per la stessa procedura.
Non vedo nulla di terribile nel piano stesso, anche se non immagino che sia rilevante in quanto il piano mostra quanto tempo impiega per eseguire la query, non per calcolare se stesso.
Il server è un 16 core con 24 GB di memoria. Non si verificano carichi pesanti di CPU o memoria.
Che cosa potrebbe causare un calcolo così lento solo su un determinato database?
Quali passi posso prendere per trovare la causa del problema?
modificare
Quindi sono riuscito ad accedere al server e ho eseguito la query con SET SHOWPLAN_XML ON .
Posso confermare che CompileTime per la query sta occupando il 99% del tempo di esecuzione della query. Lo StatementOptmEarlyAbortReason è "TimeOut" , il nostro database di test con una copia del loro database il motivo è MemoryLimitExceeded.
StatementOptmEarlyAbortReason
?