Maison > base de données > tutoriel mysql > Comment puis-je résoudre les délais d'attente des requêtes EF 6 causés par le reniflage des paramètres ?

Comment puis-je résoudre les délais d'attente des requêtes EF 6 causés par le reniflage des paramètres ?

Barbara Streisand
Libérer: 2024-12-22 14:13:12
original
915 Les gens l'ont consulté

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

Renifleur de paramètres EF 6 et indice « OPTION RECOMPILE »

Votre problème avec les délais d'expiration des requêtes EF 6, malgré l'efficacité du SQL dans SSMS, suggère le reniflage des paramètres. Pour résoudre ce problème, considérez les points suivants :

EF peut-il intégrer l'indice "OPTION RECOMPILE" ?

Oui, EF 6 permet l'interception des commandes SQL avant l'exécution. Vous pouvez ajouter l'indice "OPTION RECOMPILE" en implémentant un IDbCommandInterceptor. Voici un exemple d'implémentation :

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...
}
Copier après la connexion

Pour utiliser cet intercepteur, ajoutez-le simplement à votre application au début :

DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
Copier après la connexion

Autres considérations

  • Assurez-vous que les statistiques du tableau sont à jour, car elles peuvent affecter les paramètres reniflage.
  • Envisagez d'utiliser WithCompileOptions(new QueryCompilationContext()) pour forcer la recompilation de la requête.
  • Si la requête est extrêmement complexe, essayez de l'optimiser via un réglage manuel ou à l'aide d'indices de requête.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal