Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine schlechte Leistung gespeicherter Prozeduren beheben, die durch Parameter-Sniffing in SQL Server verursacht wird?

Wie kann ich eine schlechte Leistung gespeicherter Prozeduren beheben, die durch Parameter-Sniffing in SQL Server verursacht wird?

Barbara Streisand
Freigeben: 2024-12-31 15:58:17
Original
170 Leute haben es durchsucht

How Can I Resolve Poor Stored Procedure Performance Caused by Parameter Sniffing in SQL Server?

Schlechte Leistung gespeicherter Prozeduren aufgrund von Parameter-Sniffing

Sie stoßen auf Leistungsprobleme mit einer gespeicherten Prozedur, bei der ein Eingabeparameter (@MyDate) kann NULL oder ein Datum sein. Wenn die Prozedur zum ersten Mal mit @MyDate als NULL kompiliert wird, weisen nachfolgende Ausführungen unabhängig vom tatsächlichen Parameterwert eine schlechte Leistung auf.

Parameter-Sniffing-Verhalten

SQL Server führt „parameter Sniffing“, um Ausführungspläne basierend auf den Parameterwerten während der Kompilierung zu optimieren. Diese Werte werden im Prozedurcache erfasst und zur Schätzung zukünftiger Ausführungen verwendet.

In diesem Fall verursacht das Parameter-Sniffing das Problem, da es einen suboptimalen Ausführungsplan für alle Parameterwerte generiert, wenn @MyDate anfänglich NULL ist. Auch wenn @MyDate zur Ausführungszeit explizit auf NULL gesetzt wird, bleibt der zwischengespeicherte Plan bestehen.

Parameter-Sniffing deaktivieren

Sie sind auf das klassische Symptom des „Parameter-Sniffing“ gestoßen „schlecht geworden“, wobei der für die anfänglichen Parameterwerte erstellte Plan auch dann verwendet wird, wenn diese nicht repräsentativ für die tatsächlichen Ausführungen sind. Um das Parameter-Sniffing zu deaktivieren, haben Sie den Parameter mit @MyDate_Copy gefälscht.

Ursache und Lösung

Das Problem ist auf einen SQL Server 2005-Fehler zurückzuführen, bei dem das Parameter-Sniffing zu Fehlfunktionen führen kann. In SQL Server 2008 können Sie dieses Problem entschärfen, indem Sie die Option OPTIMIZE FOR UNKNOWN verwenden, die den Optimierer dazu zwingt, bei der Plankompilierung alle möglichen Werte für den Parameter zu berücksichtigen.

Zusätzliche Erkenntnisse

  • Planbeeinflussende Prädikate sind komplexe Ausdrücke, die einen Plan verursachen können Änderungen.
  • Das Maskieren von Parametern kann dazu beitragen, Probleme beim Parameter-Sniffing zu verhindern.
  • In schweren Fällen kann die Verwendung von OPTIMIZE FOR UNKNOWN den Optimierer dazu zwingen, alle Parameterwerte zu berücksichtigen.
  • Konsultieren Sie die Microsoft-Dokumentation für weitere Details und Updates zum Parameter-Sniffing-Verhalten.

Das obige ist der detaillierte Inhalt vonWie kann ich eine schlechte Leistung gespeicherter Prozeduren beheben, die durch Parameter-Sniffing in SQL Server verursacht wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage