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 :

Optimisation d'une requête


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    unix
    Inscrit en
    Septembre 2016
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : unix
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2016
    Messages : 83
    Points : 58
    Points
    58
    Par défaut Optimisation d'une requête
    bonjour a tous

    j'ai une requéte qui viens du logiciel sage et qui prennent beaucoup du temps pendant la phase d'exécution

    En affichant le plan d’exécution de cette dernière requêtes je viens de découvrir la présence d'une opération de type key lookup

    ci joint le syntaxe du requêtes en question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 1 * FROM F_LOTSERIE ORDER BY DL_NoOut DESC,  cbMarq DESC
    ce je que j'arrive pas comprendre a quoi sert cette opération key lookup si les deux colonnes DL_NoOut,cbMarq qui sont mis dans le clause order by ,

    ils sont intégrer dans l'index non cluster ILS_NOOUT (voir l'imprime écran),normalement je doit avoir que l'opération Scan Index

    merci pour vos aides
    Images attachées Images attachées   

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Votre index ne contient que les 2 colonnes. La clause SELECT contient l'étoile donc, doit renvoyer TOUTES les colonnes de la table. Comme il faut bien retrouver ces autres colonnes, une première lecture est faite dans l'index pour le tri et revient lires les colonnes manquantes dans la table.

    L'imbécilité est d'avoir un SELECT * !

    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/ * * * * *

  3. #3
    Membre du Club
    Homme Profil pro
    unix
    Inscrit en
    Septembre 2016
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : unix
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2016
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    malgré que j'ai procéder a ajouter tout les colonnes du table au index non cluster

    l'optimiseur n'a pas éliminer l'option key lookup mis dans son plan d’exécution il a juste éliminer cette index et il a changer par un autre

    en conservant toujours l'option key lookup
    Images attachées Images attachées  

  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 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    ça c'est une idée pire....

    Il faut éliminer le SELECT *

    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 expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Frédéric, il s'agit de 'ERP' LIGNE 100 de SAGE (je reconnais les tables).

    Tu n'as malheureusement pas la main sur les requêtes...

    J'ai eu une "altercation" avec les "architectes" SAGE concernant leurs version 7.5 et 7.70 avec des régression des performances ahurissante par rapport à la V16 sur certaines requêtes (utilisation abusive et non maîtrisée des ROW_NUMBER())

    Mon client (très connu, leader dans les coffrets cadeaux) a annulé la migration devant le peu de réaction de SAGE.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Avez vous essayé d'ajouter un index avec les deux colonne en DESC?
    Pouvez vous également nous montrer le coût de la requête?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  7. #7
    Membre du Club
    Homme Profil pro
    unix
    Inscrit en
    Septembre 2016
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : unix
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2016
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    bonjour

    la majorité des requêtes lancer par ERP sage se fait de la même Facon select 1 * et comme dit iberserk j'ai pas la main de le changer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 1 * FROM F_DOCLIGNE WHERE DO_Domaine > @DO_Domaine ORDER BY DO_Domaine,DL_TypePL,cbDL_PieceBL,cbMarq;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 1 * FROM F_DOCENTETE WHERE (DO_Type = @P1 AND (([dbo].CB_FntStr(DO_Ref) = [dbo].CB_FntStr(@P2) AND cbMarq < @P3) OR ([dbo].CB_FntStr(DO_Ref) < [dbo].CB_FntStr(@P4)))) ORDER BY (convert(varbinary(18),ISNULL(DO_Ref,''))) DESC, cbMarq DESC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 1 * FROM F_LOTSERIE ORDER BY DL_NoOut DESC,  cbMarq DESC
    Images attachées Images attachées  

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Frédéric, il s'agit de 'ERP' LIGNE 100 de SAGE (je reconnais les tables).

    Tu n'as malheureusement pas la main sur les requêtes...

    J'ai eu une "altercation" avec les "architectes" SAGE concernant leurs version 7.5 et 7.70 avec des régression des performances ahurissante par rapport à la V16 sur certaines requêtes (utilisation abusive et non maîtrisée des ROW_NUMBER())

    Mon client (très connu, leader dans les coffrets cadeaux) a annulé la migration devant le peu de réaction de SAGE.

    Je suis hélas tout à fait d'accord. La ligne 100 est hélas pourrie, au contraire de la ligne 1000 dont le modèle est particulièrement bien fait... S'agit-il d'une volonté de SAGE de dire ligne 100 kaput, passez donc à la ligne 1000 ?

    Je ne saurait l'affirmer, mais je pose la question !

    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/ * * * * *

  9. #9
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 229
    Points : 266
    Points
    266
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    au contraire de la ligne 1000 dont le modèle est particulièrement bien fait
    Vous n'êtes pas trop difficile.
    J'ai passé votre requête et voici ce que j'obtiens sur la ligne 1000.

    @+


    Nom : sage 1000.png
Affichages : 183
Taille : 57,7 Ko

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Zabriskir Voir le message
    Vous n'êtes pas trop difficile.
    J'ai passé votre requête et voici ce que j'obtiens sur la ligne 1000.

    @+
    Oui, mais sur combien de tables en tout ?
    Si c'est 5 % c'est acceptable !

    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/ * * * * *

  11. #11
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 229
    Points : 266
    Points
    266
    Par défaut
    156 tables sur 722 sortent avec votre requête. Ça fait 20% quand même.
    Et toutes les PK en char(32) avec un UNID mais ça c'est la cerise.
    Pour reprendre votre propos, je dirais que c'est un modèle "relativement" bien fait par rapport à la ligne 100

    @+

Discussions similaires

  1. Optimisation d'une requête
    Par Louis-Guillaume Morand dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/12/2005, 18h21
  2. Optimisation d'une requête d'insertion
    Par fdraven dans le forum Oracle
    Réponses: 15
    Dernier message: 01/12/2005, 14h00
  3. Optimisation d'une requête patchwork
    Par ARRG dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/09/2005, 15h23
  4. optimisation d'une requête avec jointure
    Par champijulie dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 07/07/2005, 09h45
  5. [DB2] Optimisation d'une requête
    Par ahoyeau dans le forum DB2
    Réponses: 7
    Dernier message: 11/03/2005, 17h54

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