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

Optimisations SGBD Discussion :

Demande d'aide pour l'optimisation d'une requête


Sujet :

Optimisations SGBD

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 31
    Par défaut Demande d'aide pour l'optimisation d'une requête
    Bonjour,

    j'ai un problème assez ennuyeux. J'ai développé une requête qui est très longue à l'exécution, 1min10 pour retourner 4000 lignes.
    Le SGBD utilisé est SQL Server 2005.
    Je sais que ce post est assez long mais je pense que c'est nécessaire pour bien décrire les choses.
    Je vous remercie par avance du temps que vous aurez bien voulu prendre pour m'aider.

    Description du système :
    J'ai joins le MPD à ce post.
    Le modèle porte sur le décapage de caisses de pièces en métal. Elles sont trempées dans un bac contenant une solution chauffée à une certaine température et contenant un certain taux d’acides.
    Plusieurs caisses (Table : T_CAISSE_CSS) sont ajoutées dans un plan de décapage (Table : T_PLAN_DECAPAGE_PDC). Chaque plan de décapage correspond à une température de chauffe donnée et un taux d’acide défini. Chaque plan possède un statut (Table : TR_STATUTPLAN_SPL) parmi « Initialisé », « Préparé », « En cours », « Terminé », « Interrompu ».
    Normalement, une caisse n’est plongée qu’une fois dans un bac mais il peut arriver qu’il faille la plonger une deuxième fois. Dans ce cas, elle sera ajoutée dans un autre plan de décapage avec des paramètres différents.
    La table TJ_CAISSE_DECAP_CDC est la table de jointure des tables T_CAISSE_CSS et T_PLAN_DECAPAGE_PDC.
    Chaque caisse possède un statut (Table : TR_STATUTCAISSE_STT) parmi : « Non décapé », «Réalisation », « Fini », « Quarantaine », « Prêt ».
    Ce statut est repris dans la table de jointure afin de connaître l’historique de décapage de la caisse dans le plan de décapage.
    Enfin pour terminer, une mesure est effectuée sur quelques caisses présentes dans le plan de décapage afin de vérifier si le décapage est correct. Ceci est représenté par la table T_MESURE_MES.

    Problème :
    J’ai réalisé plusieurs requêtes de sélection :
    - sélectionner les plans de décapages possédant des caisses non expédiées
    - sélectionner toutes les caisses appartenant à ces plans de décapages (même celle qui sont expédiés) et toutes les mesures associées.
    J’ai donc réalisé une vue pour la sélection des plan de décapages :
    Vue de sélection des plans de décapages possédant des caisses non expédiées :
    (1)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE VIEW V_PLAN_CSS_NEXPED
    AS
    SELECT	PDC_ID, PDC_REFERENCE, PDC_DATE_CREAT, PDC_HEUR_DEBUT, PDC_HEUR_FIN, PDC_TX_ACID, PDC_TEMPER_CHAUFF, PDC.SPL_PLN_CODE, SPL_PLN_LIBELLE
    FROM		T_PLAN_DECAPAGE_PDC PDC
    	INNER JOIN TJ_CAISSE_DECAP_CDC CDC
    		ON PDC.PDC_ID = CDC.PDC_ID
    	INNER JOIN T_CAISSE_CSS CSS
    		ON CSS.CSS_ID = CDC.CSS_ID
    	INNER JOIN TR_STATUTPLAN_SPL SPL
    		ON SPL.SPL_PLN_CODE = PDC.SPL_PLN_CODE
    WHERE	CSS.CSS_DATE_EXP IS NULL

    Voici la requête de sélection des plans de décapages :
    (2)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT	*
    FROM		V_PLAN_CSS_NEXPED

    Voici la requête de sélection des caisses dans les plans de décapages:
    (3)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT	CDC.*
    FROM		TJ_CAISSE_DECAP_CDC CDC
    	INNER JOIN V_PLAN_CSS_NEXPED PDC
    		ON CDC.PDC_ID = PDC.PDC_ID
    	INNER JOIN TR_STATUTCAISSE_STT STT
    		ON STT.STT_CSS_CODE = CDC.STT_CSS_CODE
    Voici la requête de sélection des caisses associées:
    (4)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT	CSS.CSS_ID, CSS_NB_PCE, CSS_DATE_RCP, CSS_DATE_EXP, CSS.STT_CSS_CODE, STT_CSS_LIBELLE
    FROM		T_CAISSES_CSS CSS
    	INNER JOIN TJ_CAISSE_DECAP_CDC CDC
    		ON CDC.CSS_ID = CSS.CSS_ID
    	INNER JOIN V_PLAN_CSS_NEXPED PDC
    		ON CDC.PDC_ID = PDC.PDC_ID
            INNER JOIN TR_STATUTCAISSE_STT STT
    		ON CSS.STT_CSS_CODE = STT.STT_CSS_CODE

    Cette dernière requête est très très longue. Elle retourne à peu près 4000 enregistrements en 1min10. J’ai cherché d’où pouvait provenir l’erreur et si j’enlève la dernière jointure
    (5)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INNER JOIN TR_STATUTCAISSE_STT STT
    	ON CSS.STT_CSS_CODE = STT.STT_CSS_CODE
    La requête retourne les même 4000 lignes en 1 seconde.
    Utilisant SQL Server 2005, j’ai exécuté la requête en activant le paramètre suivant :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SET STATISTICS IO ON
    La requête (4) avec la jointure consomme 1003285 pages sur la table T_CAISSES_CSS
    La requête (5) sans la jointure consomme 12132 pages.

    J’ai essayé une base plus ancienne et possédant moins d’enregistrement.
    Cette fois-ci les résultats sont :
    6122 pages consommées sur la table T_CAISSES_CSS pour la requête (4)
    6122 pages consommées sur la table T_CAISSES_CSS pour la requête (5)

    Auriez-vous une idée des pistes vers lesquelles je pourrai me tourner pour résoudre ce gros problème ?
    Merci d’avance pour votre aide et le temps que vous m’accorderez.
    Images attachées Images attachées  

Discussions similaires

  1. Demande d'aide pour la conception d'une base de donnee
    Par htmalbenur dans le forum Débuter
    Réponses: 2
    Dernier message: 05/08/2013, 16h43
  2. demande d'aide pour la création d'une BDD
    Par RasWisdom dans le forum Débuter
    Réponses: 2
    Dernier message: 16/04/2013, 11h49
  3. Réponses: 4
    Dernier message: 03/06/2012, 08h08
  4. Réponses: 1
    Dernier message: 26/06/2008, 08h23

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