Parametrisches Sniffing in EF 6 Revisited
Während dynamische Abfragen Flexibilität bieten, kann ihre Größe zu Leistungsproblemen in EF 6 führen. Ein häufiger Übeltäter ist Parameter-Sniffing, bei dem der Abfrageplan basierend auf den anfänglichen Ausführungsparametern zwischengespeichert wird, was zu ineffizienten Plänen bei Parametern führt variieren.
Adressierung des Parameter-Sniffing mit EF 6
Um das Parameter-Sniffing zu überwinden, ist es wichtig, die Datenbank-Engine zu informieren, die Abfrage bei jeder Ausführung neu zu kompilieren. Obwohl das Aktualisieren von Datenbankstatistiken gängige Praxis ist, wird das Problem dadurch möglicherweise nicht vollständig behoben.
Integration von „OPTION RECOMPILE“ in EF 6
Glücklicherweise bietet EF 6 Mechanismen zur Manipulation SQL-Befehle vor der Ausführung. Eine dieser Techniken beinhaltet die Verwendung der Abfangfunktion.
Implementierung über Interception
Das folgende Codebeispiel veranschaulicht die Implementierung der OptionRecompileHintDbCommandInterceptor-Klasse:
public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor { ... private static void addQueryHint(IDbCommand command) { ... } }
Dieser Interceptor fügt den OPTION RECOMPILE-Hinweis zu SQL-Anweisungen hinzu, die mit „select“ und beginnen enthalten den Hinweis nicht bereits.
Verwendung
Um diesen Interceptor zu nutzen, fügen Sie beim Start der Anwendung einfach den folgenden Code hinzu:
DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
Durch die Verwendung dieses Ansatzes können Sie die Datenbank-Engine zwingen, die Abfrage bei jeder Ausführung neu zu kompilieren, wodurch das Parameter-Sniffing verringert und die Abfrageleistung verbessert wird.
Das obige ist der detaillierte Inhalt vonWie kann EF 6 Interception Leistungsprobleme beim Parameter-Sniffing mindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!