EF 6 のパラメトリック スニッフィングの再考
動的クエリは柔軟性を提供しますが、そのサイズが EF 6 のパフォーマンスの問題につながる可能性があります。共通の原因パラメータ スニッフィングでは、初期実行パラメータに基づいてクエリ プランがキャッシュされ、非効率的なプランが発生します。
EF 6 によるパラメータ スニッフィングのアドレス指定
パラメータ スニッフィングを回避するには、実行のたびにクエリを再コンパイルするようにデータベース エンジンに通知することが重要です。データベース統計の更新は標準的な方法ですが、問題に完全に対処できるわけではない可能性があります。
EF 6 に「OPTION RECOMPILE」を組み込む
幸いなことに、EF 6 には操作するためのメカニズムが用意されています。実行前の SQL コマンド。このような手法の 1 つは、インターセプト機能の使用です。
インターセプトによる実装
次のコード サンプルは、OptionRecompileHintDbCommandInterceptor クラスの実装を示しています。
public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor { ... private static void addQueryHint(IDbCommand command) { ... } }
このインターセプターは OPTION RECOMPILE ヒントを SQL に追加します「select」で始まり、まだヒントが含まれていないステートメント。
使用法
このインターセプターを利用するには、アプリケーションの起動時に次のコードを追加するだけです。
DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
このアプローチを利用すると、実行のたびにデータベース エンジンにクエリを強制的に再コンパイルし、パラメータを軽減できます。スニッフィングを行い、クエリのパフォーマンスを向上させます。
以上がEF 6 インターセプトはパラメーター スニッフィングのパフォーマンスの問題をどのように軽減できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。