Un de nos clients vient de passer à un nouveau serveur.
Pour une procédure stockée particulière, la première fois que vous l'exécutez, l'exécution prend plus de trois minutes. Les exécutions suivantes durent moins d'une seconde.
Cela m'amène à penser que les trois premières minutes sont principalement consacrées au calcul du plan d'exécution. Les exécutions suivantes utilisent alors simplement le plan mis en cache et s'exécutent instantanément.
Sur nos bases de données de test, il faut environ 5 secondes pour calculer le plan de la même procédure.
Je ne vois rien de terrible dans le plan lui-même - bien que je n'imagine pas sa pertinence car le plan montre combien de temps il faut pour exécuter la requête, pas pour se calculer.
Le serveur est un 16 cœurs avec 24 Go de mémoire. Aucune charge de processeur ou de mémoire importante ne se produit.
Qu'est-ce qui pourrait provoquer un calcul aussi lent que sur une base de données particulière?
Quelles mesures puis-je prendre pour trouver la cause du problème?
Éditer
J'ai donc réussi à accéder au serveur et à exécuter la requête avec SET SHOWPLAN_XML ON .
Je peux confirmer que le CompileTime pour la requête occupe 99% du temps d'exécution de la requête. Le StatementOptmEarlyAbortReason est "TimeOut" , sur notre base de données de test avec une copie de leur base de données, la raison est MemoryLimitExceeded.
StatementOptmEarlyAbortReason
?