Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menyelesaikan Tamat Masa Pertanyaan EF 6 Disebabkan oleh Menghidu Parameter?

Bagaimanakah Saya Boleh Menyelesaikan Tamat Masa Pertanyaan EF 6 Disebabkan oleh Menghidu Parameter?

Barbara Streisand
Barbara Streisandasal
2024-12-22 14:13:12818semak imbas

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

EF 6 Parameter Sniffing dan Petunjuk "OPTION RECOMPILE"

Isu anda dengan tamat masa pertanyaan EF 6, walaupun SQL cekap dalam SSMS, mencadangkan parameter sniffing. Untuk menyelesaikan masalah ini, pertimbangkan perkara berikut:

Bolehkah EF Membenamkan Petunjuk "OPTION RECOMPILE"?

Ya, EF 6 membenarkan pemintasan perintah SQL sebelum pelaksanaan. Anda boleh menambah pembayang "OPTION RECOMPILE" dengan melaksanakan IDbCommandInterceptor. Berikut ialah contoh pelaksanaan:

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...
}

Untuk menggunakan pemintas ini, cuma tambahkannya pada aplikasi anda pada permulaan:

DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());

Pertimbangan Lanjut

  • Pastikan statistik jadual adalah terkini, kerana ia boleh menjejaskan parameter menghidu.
  • Pertimbangkan untuk menggunakan WithCompileOptions(new QueryCompilationContext()) untuk menguatkuasakan penyusunan semula pertanyaan.
  • Jika pertanyaan itu sangat rumit, cuba mengoptimumkannya melalui penalaan manual atau gunakan pembayang pertanyaan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Tamat Masa Pertanyaan EF 6 Disebabkan oleh Menghidu Parameter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn