Ich habe eine Prozedur gespeichert, die jedes Mal, wenn sie von der Webanwendung aufgerufen wird, eine wahnsinnige Zeitüberschreitung aufweist.
Ich habe den SQL-Profiler gestartet und die Anrufe in dieser Zeit verfolgt und schließlich Folgendes herausgefunden:
- Bei der Ausführung der Anweisungen aus dem MS SQL Management Studio mit denselben Argumenten (tatsächlich habe ich den Prozeduraufruf aus dem SQL-Profil-Trace kopiert und ausgeführt): Der Vorgang dauert durchschnittlich 5 bis 6 Sekunden.
- Wenn es von einer Webanwendung aufgerufen wird, dauert es mehr als 30 Sekunden (in Trace), sodass meine Webseite bis dahin tatsächlich eine Zeitüberschreitung aufweist.
Abgesehen von der Tatsache, dass meine Webanwendung einen eigenen Benutzer hat, ist alles gleich (dieselbe Datenbank, Verbindung, Server usw.). Ich habe auch versucht, die Abfrage direkt im Studio mit dem Benutzer der Webanwendung auszuführen, und es dauert nicht mehr als 6 sek.
Wie finde ich heraus, was passiert?
Ich gehe davon aus, dass dies nichts mit der Tatsache zu tun hat, dass wir BLL> DAL-Schichten oder Tabellenadapter verwenden, da die Kurve deutlich zeigt, dass die Verzögerung im tatsächlichen Verfahren liegt. Das ist alles woran ich denken kann.
BEARBEITEN Ich habe in diesem Link herausgefunden, dass ADO.NET ARITHABORT
auf true gesetzt ist - was für die meiste Zeit gut ist, aber manchmal passiert dies, und die vorgeschlagene Problemumgehung besteht darin with recompile
, dem gespeicherten Prozess eine Option hinzuzufügen . In meinem Fall funktioniert es nicht, aber ich vermute, es ist etwas sehr Ähnliches. Weiß jemand, was ADO.NET sonst noch macht oder wo ich die Spezifikation finden kann?