ホームページ >データベース >mysql チュートリアル >パラメーター スニッフィングが原因で発生する EF 6 クエリ タイムアウトを解決するにはどうすればよいですか?

パラメーター スニッフィングが原因で発生する EF 6 クエリ タイムアウトを解決するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-22 14:13:12816ブラウズ

How Can I Resolve EF 6 Query Timeouts Caused by Parameter Sniffing?

EF 6 パラメーター スニッフィングと "OPTION RECOMPILE" ヒント

SSMS の効率的な SQL にもかかわらず、EF 6 クエリ タイムアウトに関する問題は、パラメーター スニッフィングを示唆しています。これを解決するには、次の点を考慮してください:

Can EF Embed "OPTION RECOMPILE" Hint?

はい、EF 6 では、実行前に SQL コマンドをインターセプトできます。 IDbCommandInterceptor を実装することで、「OPTION RECOMPILE」ヒントを追加できます。実装例を次に示します:

public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor
{
    public void AddQueryHint(IDbCommand command)
    {
        if (command.CommandType != CommandType.Text || !(command is SqlCommand))
            return;

        if (command.CommandText.StartsWith("select", StringComparison.OrdinalIgnoreCase) && !command.CommandText.Contains("option(recompile)"))
        {
            command.CommandText = command.CommandText + " option(recompile)";
        }
    }

    // Implementation of other interface methods...
}

このインターセプタを使用するには、最初にアプリケーションに追加するだけです:

DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());

さらなる考慮事項

  • パラメータに影響を与える可能性があるため、テーブル統計が最新であることを確認してくださいスニッフィング。
  • クエリの再コンパイルを強制するには、WithCompileOptions(new QueryCompilationContext()) の使用を検討してください。
  • クエリが非常に複雑な場合は、手動チューニングまたはクエリ ヒントを使用して最適化してみてください。

以上がパラメーター スニッフィングが原因で発生する EF 6 クエリ タイムアウトを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。