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 :

Problème performance SQL Server Delphi


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
    Développeur Web
    Inscrit en
    Janvier 2003
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2003
    Messages : 58
    Par défaut Problème performance SQL Server Delphi
    Bonjour,

    J'ai développé une application de gestion de stock avec Delphi 6. La base de données est sous SQL Serveur. L'ouverture d'un table (TADOTable.Open) qui est lie à une vue (view) de la base de données prend sur mon PC de développement (pour un résultat qui retourne 23000 linges) quelques secondes (2-10 seconds) mais sur le Serveur de production plus de 10 minutes.

    voici ci-dessous la requête SQL qui générée la vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    SELECT     dbo.CDM.CBCDM, dbo.PRD.Designation, dbo.CDM.CodePRD, dbo.CDM.CodeInventaire, 
                          dbo.CDM.NumSerieCDM, dbo.CLS.LibelleCLS, dbo.CTGR.LibelleCTGR, 
                          dbo.CDM.EtatCDM, dbo.CDM.DateR, dbo.DR.PrixAchatHT, 
                          dbo.FRS.RS AS RSFRS, dbo.CDM.Observation, dbo.DPT.CodeDPT, dbo.DPT.LibelleDPT, 
                          dbo.MGZ.CodeMGZ, dbo.MGZ.LibelleMGZ, dbo.CMPT.LibelleCMPT, dbo.RYN.LibelleRYN, 
                          dbo.ETGR.LibelleETGR, dbo.TM.LibelleMVT AS MvtR, dbo.CDM.NumR, 
                          TM_1.LibelleMVT AS MvtSRT, dbo.SRT.NumSRT, dbo.SRT.DateSRT, dbo.SRT.LibelleNV, 
                          dbo.PRT.RS AS RSPRT, dbo.R.TypeR, dbo.SRT.Agent AS AgentSRT, 
                          dbo.R.Agent AS AgentR, dbo.CDM.CDMStatut, dbo.CDM.DatePeremption, 
                          dbo.CDM.PrixUnitaireR, dbo.CDM.QuantiteStock, dbo.CDM.QuantiteR
    FROM         dbo.FRS RIGHT OUTER JOIN
                          dbo.DRC INNER JOIN
                          dbo.R INNER JOIN
                          dbo.DR ON dbo.R.NumR = dbo.DR.NumR INNER JOIN
                          dbo.TM ON dbo.R.TypeR = dbo.TM.TM ON 
                          dbo.DRC.NumR = dbo.DR.NumR AND 
                          dbo.DRC.CodePRD = dbo.DR.CodePRD LEFT OUTER JOIN
                          dbo.PRT ON dbo.R.CodePRT = dbo.PRT.CodePRT ON 
                          dbo.FRS.CodeFRS = dbo.R.CodeFRS RIGHT OUTER JOIN
                          dbo.DS INNER JOIN
                          dbo.DSC ON dbo.DS.NumSRT = dbo.DSC.NumSRT AND 
                          dbo.DS.CodePRD = dbo.DSC.CodePRD INNER JOIN
                          dbo.SRT ON dbo.DS.NumSRT = dbo.SRT.NumSRT INNER JOIN
                          dbo.TM AS TM_1 ON dbo.SRT.TypeSRT = TM_1.TM RIGHT OUTER JOIN
                          dbo.ETGR RIGHT OUTER JOIN
                          dbo.CDM ON dbo.ETGR.CodeETGR = dbo.CDM.CodeETGR LEFT OUTER JOIN
                          dbo.CLS INNER JOIN
                          dbo.SC ON dbo.CLS.CodeCLS = dbo.SC.CodeCLS INNER JOIN
                          dbo.CTGR ON dbo.CLS.CodeCTGR = dbo.CTGR.CodeCTGR RIGHT OUTER JOIN
                          dbo.PRD ON dbo.SC.CodeSC = dbo.PRD.CodeSC LEFT OUTER JOIN
                          dbo.MRQ ON dbo.PRD.CodeMRQ = dbo.MRQ.CodeMRQ ON dbo.CDM.CodePRD = dbo.PRD.CodePRD ON 
                          dbo.DSC.CBCDM = dbo.CDM.CBCDM AND 
                          dbo.DSC.NumR = dbo.CDM.NumR ON 
                          dbo.DRC.CBCDM = dbo.CDM.CBCDM AND 
                          dbo.DRC.NumR = dbo.CDM.NumR LEFT OUTER JOIN
                          dbo.RYN ON dbo.ETGR.CodeRYN = dbo.RYN.CodeRYN LEFT OUTER JOIN
                          dbo.CMPT ON dbo.RYN.CodeCMPT = dbo.CMPT.CodeCMPT LEFT OUTER JOIN
                          dbo.MGZ ON dbo.CMPT.CodeMGZ = dbo.MGZ.CodeMGZ LEFT OUTER JOIN
                          dbo.DPT ON dbo.MGZ.CodeDPT = dbo.DPT.CodeDPT
    J'ai eu le même problème de lenteur sur un autre PC qui tourne sous Windows7 avec SQL Serveur 2008.

    Voici un résume de temps d'exécution de la même requête avec la même quantité de données :

    Developpement (laptop HP): Windows XP-SP3 + SQL Server 2005 : 2-6 secs
    Developpement (laptop HP): Windows XP-SP3 + SQL Server 2008 : 2-6 secs
    Teste (laptop Acer): Windows 7 + SQL Server 2008 : plus de 12 minutes
    Production (Server HP): Windows 2003 server + SQL Server 2005 : plus de 12 minutes

    Je suis vraiment bloqué à cause de ce problème de lenteur .

    Merci d'avance pour votre aide.

    Cdt,
    Burkan

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut Record de mise en relations de tables ...
    Je suis assez surpris du nombre de relations entre les tables (ou vues) de la requête.
    Si j'ai bien compté il y en a 29

    Dans une gestion de stocks, le nombre de lignes par table est assez important.
    Pas étonnant que la requête soit lente ...
    Je suis aussi très étonné qu'une gestion de stock nécessite plus d'une dizaine de tables.

    Bon. J'arrête là. Deux possibilités pour accélérer les réponses :

    Plan A) Revoir le modèle de données (trop de tables ?) avec quelques bons index.
    Mais pour cela, je suppose que c'est trop tard.

    Plan B) Passer par des tables temporaires (dans le cadre d'une procédure stockée) :
    1) On crée plusieurs requêtes ne comprenant que 2 ou 3 tables uniquement sur les données qui nous intéressent (condition WHERE).
    Cela permet d'optimiser individuellement les jointures avec la clause "WITH INDEX".
    2) Le résultat de chaque requête est placé dans une table temporaire distincte.
    3) On fait une requête sur les tables temporaires ainsi créées (qui comportent nécessairement beaucoup moins de données et donc beaucoup plus rapide).
    4) La procédure stockée renvoie le résultat.

    Sur une base assez grosse (30 Go) avec des tables de plusieurs millions de lignes,
    j'arrive à avoir des résultats en moins d'une seconde dans l'analyseur de requête (SQL Server 2000)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2003
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2003
    Messages : 58
    Par défaut
    Bonjour Népomucène,

    La requête prend mois de 2 sec dans SQL Serveur Studio Manager et mois de 6 seconds avec mon application et Windows XP SP3, et plus de 12 minutes avec mon application (le même exécutable) et Windows 2003 Serveur.

    Pour moi la requête est assez (ou presque) optimisée. peut être que le problème est dans l'application elle même. mais la question est:

    est ce normal d'avoir deux temps d'exécution complètement déferrent pour la même application sur deux systèmes déférents ? je note que l'application est compilé avec Delphi6 sous Windows XP.

    Merci d'avance pour ton aide.

    Cdt,
    Fouad

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Oui, j'ai souvent vu des différences assez importante d'un système à l'autre.

    Cependant, passer de 6 secondes à 12 minutes est tout de même exceptionnel.

    Combien de temps met la requête sur le serveur Windows 2003 en utilisant SQL Serveur Studio Manager ? (pour faire la différence avec l'application)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Quel est l'execution plan de la requete en production ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2003
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2003
    Messages : 58
    Par défaut
    bonjour Népomucène;

    temps d'execution avec SQL Serveur Studio Manager sur le serveur 2003 = 2-6 secs

    Cdt,
    Burkan

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème performance SQL Server Delphi
    Par burkan dans le forum Bases de données
    Réponses: 15
    Dernier message: 20/08/2010, 01h41
  2. Performance SQL Server - lot DTS
    Par arno_web dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/01/2006, 14h30
  3. Problème Curseur SQL SERVER
    Par Yanmeunier dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/12/2005, 19h19
  4. Problème installation SQL Server 2000 (programme antérieur)
    Par 404Found dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/04/2005, 10h24
  5. Problème réplication SQL Server et SQL Server CE (RDA)
    Par didix11 dans le forum Réplications
    Réponses: 2
    Dernier message: 15/04/2004, 11h10

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