Die Ausführung von Stored Proc von DotNet dauert sehr lange, aber in SSMS ist es sofort

7

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

  • Dauer: 28030
  • Liest: 2663365
  • Schreibt: 0

SP innerhalb von SSMS

  • Dauer: 450
  • Liest: 23535
  • Schreibt: 65

Abfrage direkt in Dot Net

  • Dauer: 360
  • Liest: 24865
  • Schreibt: 57

Folgende Dinge fallen mir auf:

  • Die Statistiken für das SSMS und die direkte Abfrage in Dot Net sind sehr ähnlich
  • Der Dot Net SP macht eine Menge Lesevorgänge, schreibt aber nicht
  • Die anderen beiden machen nur sehr wenige Lesevorgänge, aber ein paar schreibt

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.

    
Johann Strydom 06.07.2010, 14:31
quelle

2 Antworten

17

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 .

    
Jacques Bosch 09.07.2010, 14:36
quelle
2

Ich habe das gespeicherte Proc einfach neu erstellt und behoben. Sehr merkwürdig in der Tat.

    
Johann Strydom 06.07.2010 15:17
quelle