ホームページ > データベース > mysql チュートリアル > EF 6 パラメーター スニッフィングのパフォーマンスの問題を防ぐにはどうすればよいですか?

EF 6 パラメーター スニッフィングのパフォーマンスの問題を防ぐにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-29 05:31:13
オリジナル
826 人が閲覧しました

How Can I Prevent EF 6 Parameter Sniffing Performance Issues?

EF 6 パラメーター スニッフィング

EF 6 で大規模な動的クエリを操作する場合、パラメーター スニッフィングが原因でパフォーマンスの問題が発生する可能性があります。これは、パラメーターが変更された場合でも、データベース エンジンが特定のパラメーター セットを含むクエリの実行プランを保持し、それを後続の実行に適用する場合に発生します。

この問題に対処するために、EF 6 はインターセプト機能を提供します。これにより、SQL コマンドを実行前に操作できるようになります。これにより、「OPTION RECOMPILE」などのオプションをコマンドに埋め込むことができます。

この機能を利用するには、[IDbCommandInterceptor](https://docs.microsoft.com/en-us/dotnet/api) /entityframework/system.data.entity.infrastructor.idbcommandinterceptor?view=ef6) インターフェイスをオーバーライドします。 [ReaderExecuting](https://docs.microsoft.com/en-us/dotnet/api/entityframework/system.data.entity.infrastructor.idbcommandinterceptor.readerexecuting?view=ef6) メソッド。このメソッドでは、必要なクエリ ヒントをコマンドに追加できます。

クエリを選択するための「OPTION RECOMPILE」ヒントを追加するインターセプターの実装例を次に示します。

public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor
{
    public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
    {
        addQueryHint(command);
    }

    private static void addQueryHint(IDbCommand command)
    {
        if (command.CommandType != CommandType.Text || !(command is SqlCommand))
            return;

        if (command.CommandText.StartsWith("select", StringComparison.OrdinalIgnoreCase) &amp;&amp; !command.CommandText.Contains("option(recompile)"))
        {
            command.CommandText = command.CommandText + " option(recompile)";
        }
    }
}
ログイン後にコピー

インターセプタを使用するには、アプリケーションの先頭に次の行を追加します:

DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
ログイン後にコピー

これにより、「OPTION」が確実に実行されます。 RECOMPILE" ヒントが EF 6 を通じて実行されるすべての選択クエリに追加され、パラメーター スニッフィングの影響が軽減されます。

以上がEF 6 パラメーター スニッフィングのパフォーマンスの問題を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート