Heim >Datenbank >MySQL-Tutorial >Wie wirkt sich Parameter-Sniffing auf die Leistung gespeicherter Prozeduren aus und wie kann es gemindert werden?
Auswirkungen von Parameter-Sniffing auf die Leistung gespeicherter Prozeduren
Eine gespeicherte Prozedur, die einen Datumsparameter (@MyDate) nutzt, weist erhebliche Leistungsunterschiede auf der Anfangswert des Parameters während der Kompilierung. Wenn @MyDate anfänglich als NULL übergeben wird, kommt es bei nachfolgenden Ausführungen der Prozedur unabhängig vom tatsächlichen Eingabewert zu schlechter Leistung. Allerdings gewährleistet die Initialisierung von @MyDate mit einem Datum oder dem aktuellen Datum während der Kompilierung eine optimale Leistung für alle nachfolgenden Aufrufe.
Dieses Verhalten kann auf den Parameter-Sniffing-Mechanismus des SQL Servers zurückgeführt werden, der die Werte von Abfrageparametern während der Speicherung auswertet Prozedurkompilierung. Wenn @MyDate in diesem Fall anfänglich NULL ist, generiert der Optimierer einen ineffizienten Ausführungsplan, der auch dann bestehen bleibt, wenn @MyDate später Nicht-NULL-Werte enthält.
Um dieses Problem zu beheben, deaktivieren Sie das Parameter-Sniffing mithilfe einer Kopie von der @MyDate-Parameter (@MyDate_Copy). Dadurch wird sichergestellt, dass der SQL Server den Abfrageplan basierend auf dem aktuellen Wert von @MyDate zur Laufzeit optimiert und die Auswirkungen des anfänglichen Parameterwerts eliminiert.
In SQL Server 2005 weist das Parameter-Sniffing bekanntermaßen schwerwiegende Fehler auf. Dies führt zu Leistungsengpässen und sogar zur Nichterfüllung von Abfragen. Daher wird empfohlen, gespeicherte Prozedurparameter zu maskieren, um diese Probleme zu vermeiden. SQL Server 2008 stellt die OPTIMIZE FOR UNKNOWN-Klausel bereit, die zur Behebung von Leistungsproblemen im Zusammenhang mit Parameter-Sniffing verwendet werden kann.
Das obige ist der detaillierte Inhalt vonWie wirkt sich Parameter-Sniffing auf die Leistung gespeicherter Prozeduren aus und wie kann es gemindert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!