Question

L'un de nos clients vient de faire évoluer vers un nouveau serveur.

Pour une procédure stockée particulière la première fois que vous l'exécutez, prend plus de trois minutes à courir. les exécutions suivantes sont moins de 1 seconde.

Cela conduit moi à croire que les trois premières minutes sont principalement repris le calcul du plan d'exécution. courses suivantes puis il suffit d'utiliser le plan mis en cache et exécuter instantanément.

Sur nos bases de données de test, il prend 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 ne pense pas son pertinent comme le montre du plan le temps qu'il faut pour exécuter la requête, pas lui-même calculer

Le serveur est un noyau 16 avec une mémoire 24 Go. Aucune CPU lourde ou la charge mémoire se produit.

Qu'est-ce qui pourrait être à l'origine d'un tel calcul lent que sur une base de données particulière?

Que puis-je faire pour trouver la cause du problème?

Modifier

J'ai donc réussi à accéder au serveur et ont exécuter la requête avec SET SHOWPLAN_XML ON .

Je peux confirmer que la compiletime pour la requête prend 99% du temps d'exécution de la requête. StatementOptmEarlyAbortReason "TimeOut" , sur notre base de données de test avec une copie de leur base de données est la raison MemoryLimitExceeded.

Était-ce utile?

La solution

Je déteste répondre à ma propre question, d'autant plus que je l'ai eu tant l'aide d'autres pour élaborer la solution, mais voilà.

Le problème était dû à des statistiques non explosées dans la base de données. En regardant le plan d'exécution, l'optimisateur attendait 11.5tb des données renvoyées par la requête. En réalité, on recevait 87kb. Je sais maintenant que d'énormes disparités entre les lignes prévus et réels renvoyés est un signe que les statistiques sont dépassées.

Il suffit de courir

exec sp_updatestats

force la base de données à mettre à jour les statistiques de toutes les tables.

a pris le temps d'exécution des requêtes vers le bas à partir de 3 minutes à 6 secondes. Everyones un gagnant!

Merci pour tous les types d'aide. : 0)

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top