Ich habe eine gespeicherte Prozedur in SQL Server 2000, die 3 Parameter benötigt. Wenn ich den gespeicherten Proc von DotNet mit SqlCommand.ExecuteReader () aufrufen, dauert es etwa 28 Sekunden.
Wenn ich dieselbe Abfrage innerhalb von SSMS direkt ausführe, kehrt sie sofort zurück.
Wenn ich die Abfrage aus dem Stored Proc heraushole und sie direkt über DotNet laufe, kommt sie auch sofort zurück.
Dies sind die Ergebnisse einer SQL Profiler-Sitzung
SP Inside Dot Net
SP innerhalb von SSMS
Abfrage direkt in Dot Net
Folgende Dinge fallen mir auf:
Jede Hilfe wäre willkommen.
Hier ist eine leicht verdeckte Version des SP:
Ich bezweifle, dass es sich um ein Abfrageplanproblem handelt, denn selbst wenn ich es wiederholt über DotNet ausführe, bekomme ich immer die gleichen Ergebnisse.
Hier ist eine Version des SP, die aufgrund von IP-Problemen leicht verändert wurde. Ich hoffe es macht noch Sinn:
%Vor%Tut mir leid wegen der Formatierung. Ich habe darum gekämpft, es im Forum überhaupt lesbar zu machen.
Da mein Kommentar die richtige Antwort zu geben schien, beschloss ich, ihn im Sinne von stackoverflow in eine vollständige Antwort für die Nachwelt zu übertragen.
Ihr Problem scheint von SQL Server Parameter Sniffing verursacht zu werden . Um dies zu verhindern, weisen Sie einfach Ihre eingehenden Parameterwerte anderen Variablen zu, die oben im SP angegeben sind.
Siehe diesen schönen Artikel darüber
Beispiel:
%Vor%Ich habe diese Informationen von eggheadcafe kopiert. com .
Bearbeiten: Laut Johann Strydoms Kommentar gibt es hier eine weitere Möglichkeit: Optimieren von parametergesteuerten Abfragen mit SQL Server OPTIMIZE FOR Tipp .
Ich habe das gespeicherte Proc einfach neu erstellt und behoben. Sehr merkwürdig in der Tat.
Tags und Links .net sql-server c# ado.net sql-server-2000