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
882 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!

source:php.cn
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