J'essaie de comprendre un problème que nous rencontrons avec SQL Server 2000. Nous sommes un site Web modérément transactionnel et nous avons un proc stocké appelé sp_GetCurrentTransactions
qui accepte un identifiant client et deux dates.
Maintenant, selon les dates et le client, cette requête peut renvoyer n'importe quoi de zéro à des milliers de lignes.
Le problème: ce que nous avons vécu, c'est que nous obtiendrons soudainement un certain nombre d'erreurs (généralement Execution Timeout Expired
ou similaires) pour un client particulier pendant qu'il essaie d'exécuter ce processus stocké. Nous examinons donc la requête, l'exécutons dans SSMS et constatons qu'elle prend 30 secondes. Nous recompilons donc le proc stocké et -bang- il fonctionne maintenant en 300 ms.
J'en ai parlé à notre DBA. Il m'a dit que la base de données a créé un plan de requête lorsque nous avons créé le proc stocké. Il a dit que c'était un bon plan pour cet ensemble de paramètres, mais si vous y jetez un certain ensemble de paramètres, alors le plan ne sera pas le meilleur plan pour ces données, et donc vous le verrez fonctionner lentement.
Les options qui me sont présentées sont le déplacement de cette requête problématique à partir d'un proc stocké et le retour dans SQL dynamique qui a son plan d'exécution créé à chaque exécution.
Cela me semble être un pas en arrière et j'ai l'impression qu'il doit y avoir un moyen de contourner cela. Existe-t-il un autre moyen de résoudre ce problème?
Toutes les réponses sont appréciées.