Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Schlechte Leistung des Ausführungsplans für gespeicherte Prozeduren in SQL – Parameter-Sniffing

Grundsätzlich ja - Parameter-Sniffing (in einigen Patch-Levels von) SQL Server 2005 ist stark beschädigt. Ich habe Pläne gesehen, die effektiv nie abgeschlossen sind (innerhalb von Stunden bei einem kleinen Datensatz), selbst für kleine Datensätze (wenige tausend Zeilen), die in Sekunden abgeschlossen sind, sobald die Parameter maskiert sind. Und dies in Fällen, in denen der Parameter immer dieselbe Nummer war. Ich würde hinzufügen, dass ich zur gleichen Zeit, als ich mich damit befasste, viele Probleme mit LEFT JOIN/NULLs fand, die nicht abgeschlossen wurden, und ich ersetzte sie durch NOT IN oder NOT EXISTS und dies löste den Plan zu etwas, das abgeschlossen werden würde. Wieder ein (sehr schlechtes) Ausführungsplanproblem. Zu der Zeit, als ich mich damit befasste, gaben mir die DBAs keinen SHOWPLAN-Zugriff, und seit ich begann, jeden SP-Parameter zu maskieren, hatte ich keine weiteren Probleme mit dem Ausführungsplan, bei denen ich mich wegen Nichterfüllung damit befassen müsste .

In SQL Server 2008 können Sie OPTIMIZE FOR UNKNOWN verwenden .