Leistungsunterschiede bei gespeicherten Prozeduren: SqlCommand vs. SSMS
Die Ausführungszeit einer gespeicherten Prozedur kann zwischen SQL Server Management Studio ( SSMS) und System.Data.SqlClient.SqlCommand, auch ohne Parameter-Sniffing. Die Grundursache kann in den unterschiedlichen SET-Optionen liegen, die von jeder Ausführungsumgebung aktiviert werden.
Durch die Verwendung von SQL Server Profiler wurde festgestellt, dass SSMS mehrere SET-Befehle ausführt, die der .NET Sql Client Data Provider auslässt. Diese SET-Optionen können den Abfrageplan und die Leistung beeinflussen. Eine entscheidende SET-Option, die sich in diesem Fall als Übeltäter herausstellte, ist:
SET ARITHABORT ON
Wenn diese SET-Option aktiviert ist, werden Abfragen mit arithmetischen Operationen durchgeführt, die möglicherweise zu einem Überlauf, einer Division durch Null oder anderen außergewöhnlichen Bedingungen führen könnten wird vorzeitig aufhören. Dieses Verhalten unterscheidet sich von der Standardeinstellung von SET ARITHABORT OFF, die das Auftreten der Ausnahme zulässt.
Daher können der Ausführungsplan und die Leistung einer gespeicherten Prozedur durch die Option SET ARITHABORT beeinflusst werden. Wenn eine arithmetische Operation innerhalb der gespeicherten Prozedur dieser Einstellung unterliegt, kann es zu Unterschieden in der Ausführungszeit zwischen SSMS und SqlCommand kommen.
Um dieses Problem zu entschärfen, ist es ratsam, die von Anwendungen verwendeten SET-Optionen sorgfältig zu überprüfen die eine Verbindung zu SQL Server herstellen. Durch die Verwendung derselben SET-Optionen in SqlCommand wie in SSMS können Leistungsinkonsistenzen vermieden werden. Darüber hinaus ist die Nutzung des SQL Server Profilers zur Identifizierung aktiver SET-Optionen eine wertvolle Debugging-Technik.
Andere Faktoren wie Verbindungszeichenfolgenparameter, Transaktionsverhalten und MARS-Einstellungen (Multiple Active Result Sets) können sich ebenfalls auf die Leistung auswirken und sollten als potenziell beitragende Faktoren in Betracht gezogen werden.
Das obige ist der detaillierte Inhalt vonWarum wird meine gespeicherte Prozedur in SSMS schneller ausgeführt als in SqlCommand?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!