2009-08-21 2 views
2

Ich habe eine Sproc, die viel mehr Zeit als ich erwartet hatte.Sproc Ausführung weit langsamer als SQL Ad-hoc-Abfrage entspricht

Ich zog die SQL und führte es mit nur deklarierten Variablen für die Parameter. Es lief fast sofort (gegenüber einer zuverlässigen 8 Sekunden mit dem Sproc). Dies ist dieselbe SQL auf demselben Computer, die dieselben Daten zurückgibt.

Wie kann ich herausfinden und beheben, was bewirkt, dass der Sproc langsam ist?

Dies ist auf SQL Server Express.

Vielen Dank.

+0

Sounds wie Parameter Sniffing: http://omnibuzz-sql.blogspot.com/2006/11/parameter-sniffing-stored-procedures.html –

Antwort

1

Dies ist Parameter Sniffing. Ändern Sie einfach Ihre Prozedur, um das Gleiche zu tun: Kopieren Sie alle Parameter in lokale Variablen und verwenden Sie stattdessen den Körper Ihrer Prozedur mit den lokalen Variablen.

+0

Dank RBarryYoung und rexem! Durch diese Änderung wurde der Sproc wie erwartet ausgeführt. –

0

Ist eine App, die die gespeicherte Prozedur ausführt, oder führen Sie die gespeicherte Prozedur über Query Analyzer aus?

1

Suchen Sie in der Definition der gespeicherten Prozedur nach ANSI_NULLS. Stellen Sie sicher, dass dies eingeschaltet ist. (SET ANSI_NULLS ON)

Standardmäßig im Abfragefenster in SSMS ist es eingeschaltet. Wir haben ein Problem gefunden, bei dem ANSI_NULLS explizit auf off gesetzt wurde und der sproc drastisch verlangsamt wurde.

+0

IIRC Dies kommt von Indizes, die der SPROC verwenden möchte, die mit einer anderen Einstellung (und damit inkompatibel) erstellt werden. – RBarryYoung

+0

Das Festlegen bestimmter Optionen (einschließlich ANSI_NULLS) in einem gespeicherten Prozess kann SP-Neukompilierungen verursachen - sicherlich die Ursache für Ihre Leistungsprobleme. Weitere Informationen finden Sie unter http://support.microsoft.com/kb/243586 –

Verwandte Themen