Dilemma der Abfrageoptimierung: SQL langsam in ASP.NET im Vergleich zu SSMS
Ein Entwickler stand vor einem faszinierenden Problem bei der Abfrageoptimierung ein erheblicher Leistungsunterschied zwischen einer in SSMS ausgeführten Abfrage und derselben Abfrage, die auf ihrer ASP.NET-Website ausgeführt wird. Die Abfrage zeigt nach Änderungen zunächst eine zufriedenstellende Leistung auf der Website an, nur um am nächsten Tag wieder träge zu werden.
Um weiteren Kontext bereitzustellen, umfasst die betreffende Abfrage komplexe Verknüpfungen und Unterabfragen, einschließlich dynamischer Filterung basierend auf einer Kunden-ID Parameter (@customerID). Es ruft Daten aus mehreren Tabellen ab, darunter „Product“, „Compunix_ProductMMY“, „Compunix_CustomerMMY“, „Category“ und „ProductCategory“.
Merkwürdigerweise funktioniert dieselbe Abfrage auch auf zwei anderen Websites einwandfrei, was darauf hindeutet, dass das Problem auf dieser speziellen Website lokalisiert ist. Der einzige Unterscheidungsfaktor besteht darin, dass die in Schwierigkeiten geratene Website im Vergleich zu den anderen eine erheblich größere Anzahl von Produkten (54.000) hostet. Alle Websites und Datenbanken befinden sich auf demselben physischen Server.
Ursache: Parameter-Sniffing
Bei der Untersuchung ist es sehr wahrscheinlich, dass das Problem auf Parameter-Sniffing zurückzuführen ist, a Häufige Leistungsprobleme in SQL Server. Beim Parameter-Sniffing handelt es sich um einen Optimierungsvorgang, bei dem SQL Server die erste Ausführung einer Abfrage analysiert und anhand der gefundenen Parameterwerte einen geeigneten Ausführungsplan ermittelt.
Wenn sich die Parameterwerte jedoch während nachfolgender Ausführungen ändern, kann der Ausführungsplan möglicherweise geändert werden nicht entsprechend anpassen, was zu einer suboptimalen Leistung führt. Im Fall dieser Abfrage ist es möglich, dass die anfängliche Ausführung in SSMS andere Parameterwerte verwendet als in ASP.NET, was zu unterschiedlichen Ausführungsplänen und Leistungsergebnissen führt.
Abwehrstrategien
Um dieses Problem zu beheben, kann der Entwickler die Implementierung von Strategien in Betracht ziehen, die das Parameter-Sniffing eindämmen, wie zum Beispiel:
Durch deren Implementierung Mithilfe dieser Techniken kann der Entwickler das Parameter-Sniffing-Problem überwinden und eine konsistente Leistung seiner Abfrage über SSMS und ASP.NET hinweg sicherstellen.
Das obige ist der detaillierte Inhalt vonWarum ist meine SQL-Abfrage in SSMS schnell, in ASP.NET jedoch langsam, und wie kann ich diese Leistungsunterschiede beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!