Notre application exécute une longue procédure stockée avec plusieurs ensembles de résultats. Les utilisateurs éprouvent de longs temps d'attente pour cette requête, donc j'ai entrepris de déterminer ce qui cause le retard.SQL - L'appel de "reader.NextResult" provoque un long délai
Je mets un chronomètre sur l'exécution et la lecture des données, et cela prend 6-7 secondes à chaque fois. J'ai chronométré l'exécution de la procédure stockée, en espérant que cela prendrait tout le temps. Ce n'était pas - cela a pris 30ms ou plus.
J'ai donc mis des minuteurs autour de chacun des ~ 20 jeux de résultats. Chaque "bloc" a pris très peu de temps (< 10ms) à l'exception d'un dans le milieu du traitement, qui a pris 5-6 secondes. Après d'autres recherches, j'ai découvert que c'était l'appel "reader.NextResult()" qui prenait tout le temps. Ce long délai arrive au même endroit à chaque fois.
Si je viens exec la procédure stockée, il semble fonctionner réelle Snappy, il ne semble pas être un problème avec la requête - mais je ne sais pas ...
Comment interpréter ce? SQL expédie-t-il les ensembles de résultats au fur et à mesure qu'il les obtient, et l'ensemble de résultats en question est-il susceptible d'être un problème dans ma requête SQL? Ou est-ce que quelque chose d'autre peut causer le retard?
EDIT:
Merci pour la réponse et les commentaires - j'utilise SQL Server et .NET
Ce que j'étais plus curieux de savoir est pourquoi mon retard se produit sur la « NextResult() » appel. Étant nouveau dans le développement SQL, j'ai supposé qu'un délai dû à une exécution de procédure stockée longue apparaîtrait dans mon application en attendant que l'appel "ExecuteReader()" soit renvoyé. Il semble maintenant que SQL commencera à retourner les données AVANT que la requête soit terminée, et s'il y a un délai, il retardera l'appel NextResult().
J'ai commencé en pensant que mon retard était dans la procédure stockée. Lorsque l'appel de ExecuteReader() est revenu rapidement, j'ai pensé que mon retard était dans la gestion du lecteur par mon code. Lorsque le délai a fini par être sur l'appel NextResult(), j'étais confus. Je suis maintenant de retour à l'examen de la procédure stockée.
Merci à ceux d'entre vous qui ont pris le temps d'examiner mon problème et vous ont offert votre aide.
quelle langue/plateforme utilisez-vous? pouvez-vous fournir un exemple de code source pour illustrer ce problème? –
@ ScottB, vous supposez que la plate-forme rdbms n'est pas importante pour cette question et c'est une fausse hypothèse. Il est également important de savoir exactement quelles instructions SQL sont en cours d'exécution. Détails, détails, détails. –