IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Temps d'exécution de requête différent entre SSMS et C#


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Par défaut Temps d'exécution de requête différent entre SSMS et C#
    Bonjour à tous,

    Je suis confronté à un problème cornéllien sur mon application.

    J'ai eu des remontées utilisateurs sur un problème de performance sur un écran de recherche de mon application web ASP.NET / SQL Server 2008 R2.

    Nous avons optimisé la requête SQL via SSMS pour passer dans un temps d'exécution avoisinant les 3 secondes.

    Mais nous avons eu de nouveaux retours utilisateur nous informant que le problème n'était pas résolu.

    Quand je regarde ma requête de 3 secondes sous SQL Server Profiler (pour voir le temps d'exécution C# applicatif), je me suis rendu compte que le temps d'exécution de cette même requête était de 40 secondes.

    Comment cela est-ce possible?

    Je précise que c'est exactement le même code qui est exécuté (j'ai C/C la requête de SQL Server Profiler dans SSMS).

    Merci d'avance de votre aide.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Est-ce que tu compares bien les mêmes valeurs entre SSMS et SQL Server Profiler ? Question bête, mais c'est juste pour être sûr que la comparaison se fait bien sur des chiffres comparables

    Quel provider utilises-tu pour ton application C# ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre confirmé Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Par défaut
    Hello et merci de ta réponse.

    Alors je ne peux que comparer les mêmes valeurs car j'ai fais un copier coller de la requête dans les traces de SQL Server Profiler.

    En provider, je suis sur du provider de base du framework .NET (utilisation de SqlCommand du namespace System.Data.SqlClient).

    Aurais-tu une piste à me donner?
    Toute idée est bonne à prendre.

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Des pistes il peut y en avoir plusieurs. Il faut d'abord noter qu'il y a des différences entre la connexion établie par SSMS et celle établie par ton application. Il y a également une différence dans les instructions SET qui passent.

    En principe SQL Server Profiler te permet de voir les différences (il faut regarder juste avant le passage de la requête).

    Une autre chose à prendre en compte c'est qu'il y a peut-être un effet de cache avec SSMS. Si la première exécution de la requête est lente, et que les suivantes sont très rapides, c'est que les résultats sont mis en cache, ce qui peut donc fausser ta comparaison de perfs.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre confirmé Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Par défaut
    Merci de ton retour.

    De quelle manière peut-on désactiver ces mécasnisme de cache sous SSMS pour se mettre dans une situation quasi applicative?

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Déjà je pense qu'il faut que tu vérifies si le cache t'impacte effectivement. Pour vider le cache, tu peux passer le code suivant :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    USE <YOURDATABASENAME>;
    GO
    CHECKPOINT;
    GO
    DBCC DROPCLEANBUFFERS;
    GO
    (source : Clearing Cache for SQL Server Performance Testing)

    Je te suggère de le passer une fois, puis de relancer une fois ta requête et de noter le temps d'exécution. Refais ça 3 ou 4 fois et compare les résultats.

    Ensuite tu peux faire le test d'exécuter 5 fois ta requête, en prenant soin au préalable de vider le cache avant chaque exécution. Ensuite tu compares les résultats.

    [EDIT] : en fouillant un peu sur Google, je suis tombé sur ça : Slow in the Application, Fast in SSMS? Understanding Performance Mysteries
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. [2008R2] Nombre de résultats d'une requête différent entre deux exécutions
    Par maxwell374 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/02/2015, 17h39
  2. [WD15] Temps d'exécution des requêtes
    Par thierrybatlle dans le forum WinDev
    Réponses: 7
    Dernier message: 18/02/2010, 16h21
  3. requête différente entre mysql et postgresql
    Par DiverSIG dans le forum Langage SQL
    Réponses: 6
    Dernier message: 04/12/2009, 15h05
  4. Erreur OEM 10gR2 - Temps d'exécution des requêtes
    Par fabien.morel2002 dans le forum Administration
    Réponses: 0
    Dernier message: 30/11/2009, 16h00
  5. Resultat de requête différent entre Access et Toad
    Par nicky0007us dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 13/06/2008, 17h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo