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

MS SQL Server Discussion :

Estimated subtree cost et temps d'exécution


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 97
    Par défaut Estimated subtree cost et temps d'exécution
    Bonjour,
    je travaille sur l'optimisation des requêtes sous SQL Server.
    Pour comparer 2 requêtes, j'utilise le plan d'exécution réel de SQL Server Management Studio et notamment le champs Estimated Subtree Cost qui doit être le plus faible possible.

    Voici les résultats obtenus pour l'exécution de 2 requêtes qui renvoient le même résultat :
    - Requête 1 > Subtree cost : 0.25, temps d'exécution : plus de 5 secondes
    - Requête 2 > Subtree cost : 0.52, temps d'exécution : moins de 1 seconde


    Ma question est donc de savoir quelle requête est effectivement la plus efficace?
    Est-ce que la requête 2 qui à un Subtree Cost faible n'aura pas un temps d'exécution beaucoup plus long sur une volumétrie plus importante?

    Merci pour vos infos et vos pistes.

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Par défaut
    bonjour,
    pour pouvoir te répondre, il faudrait le ddl des tables et indexs (+ jeu d'essai) et les requêtes

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 699
    Par défaut
    Je ne suis pas expert, mais j'ai envie de dire que dans "Estimated Subtree Cost", il y a "Estimated". Ce qui veux bien dire que la donnée est une estimation et par conséquent peu fiable...

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 995
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 995
    Billets dans le blog
    6
    Par défaut
    Le cout estimé sera parfaitement fiable si :
    1) la requête est purement ensembliste (donc aucun appel à des fonctions, même implicites)
    2) les statistiques sont à jour.

    A ces deux conditions, le cout estimé sera assez directement proportionnel au temps CPU (et non au temps d'exécution). En effet, passé un coût de 5 (paramétrable) l'optimiseur transforme le plan mono threadé en plan parallélisé (multi threadé) qui a la faculté de présenter en général un temps d'exécution moindre, mais un coût CPU comparable voir légèrement plus élevé.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 97
    Par défaut
    Merci pour vos réponses.
    Dans ce cas, devons nous purement et simplement comparer les performances de 2 requêtes sur leur seule durée d'exécution?
    Cette façon de faire me parait un peu simpliste. En effet, malgré un temps d'exécution plus rapide et un "Estimated Subtree Cost" (même peu fiable) élevé, ma requête n°2 ne risque-t-elle pas de devenir très lente lorsque je me trouverai dans une base avec un volume plus important de données?

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 995
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 995
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par moumoune65 Voir le message
    Merci pour vos réponses.
    Dans ce cas, devons nous purement et simplement comparer les performances de 2 requêtes sur leur seule durée d'exécution?
    Certainement pas, mais bien sur leur cout estimé. La durée d'exécution dépend du contexte... En effet si le serveur est très occupé, la processus intégrera des temps de chargement/déchargement plus important que sur un serveur identique servant de test.

    Cette façon de faire me parait un peu simpliste. En effet, malgré un temps d'exécution plus rapide et un "Estimated Subtree Cost" (même peu fiable) élevé, ma requête n°2 ne risque-t-elle pas de devenir très lente lorsque je me trouverai dans une base avec un volume plus important de données?
    Pas non plus. En effet, l'optimiseur peut décider de changer de plan de requête en fonction de la volumétrie des données, comme de la distribution des données...

    Par exemple dans cet article : http://blog.developpez.com/sqlpro/p9...alles_en_sql_1
    on voir clairement que le plan change en fonction de l'augmentation de volume des données a manipuler...
    Avec les requêtes 5 et 6 SQL Server passe de 297 (solution 5) ou 366 (solution 6) à 140 millisecondes alors que le volume des données augmente passant de 1000 à 3000...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Citation Envoyé par moumoune65 Voir le message

    Voici les résultats obtenus pour l'exécution de 2 requêtes qui renvoient le même résultat :
    - Requête 1 > Subtree cost : 0.25, temps d'exécution : plus de 5 secondes
    - Requête 2 > Subtree cost : 0.52, temps d'exécution : moins de 1 seconde
    Si les deux requêtes renvoient le même résultat, on peut raisonnablement penser qu'elle manipulent les même données. Il se peut alors que la première mette plus de temps à s’exécuter car elle doit lire les données sur le disque, et que la deuxième est plus rapide simplement parce que les données sont déjà en cache...

    vérifier les I/O de chaque requête peut être aussi un bon indicateur quant à leurs performances respectives.

Discussions similaires

  1. Comment estimer le temps d'exécution d'une tâche durant le traitement?
    Par Klemsy78 dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 06/07/2014, 12h46
  2. [C#] Calcul du temps d'exécution.
    Par lozzko dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/06/2005, 16h12
  3. Réponses: 2
    Dernier message: 25/05/2004, 15h33
  4. Affichage du temps d'exécution d'une requête
    Par milka dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 17h48
  5. Temps d'exécution des instructions FPU
    Par ubi dans le forum Assembleur
    Réponses: 2
    Dernier message: 24/10/2003, 18h39

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