|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 31 ![]() |
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 :
Voici la requête de sélection des plans de décapages : (2) Voici la requête de sélection des caisses dans les plans de décapages: (3) Code sql :
(4) Code sql :
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 :
Utilisant SQL Server 2005, j’ai exécuté la requête en activant le paramètre suivant : 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. |
||||||||
|
|
00
|
|
|
#2 | |
|
Membre Expert
![]() ![]() |
Citation:
je vous ai lu. je n'ai pas de réponse directe. soit je n'ai pas le niveau, soit que votre description ne présente pas le creux du probléme. Quelques précisions peuvent être utile quand même ? Votre schéma MPD présente 2 tables nommées TR_STATUTCAISSE_STT, cela me parait étrange ? pas vous ? Votre base est indexée au minimum ? Clé étrangères indexées. Votre base est correctement maintenue ? Réindexation chaque semaine, Mise à jour des statistiques chaque semaine, Plan de maintenance en place. Avez-vous penser à passer le tuning advisor de sql serveur 2005 sur votre requête de 1 minute pour déterminer si une amélioration significative était possible de manière automatique ? |
|
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 31 ![]() |
Bonsoir,
merci pour la réponse, Citation:
Citation:
Citation:
Suite à votre message, j'ai mis à jour les statistiques, reconstruit et réorganisé les index de chaque table concernée par la requête. Le nombre d'analyse pour la table T_CAISSE_CSS est passé de 7 à 2 et le nombre de lecture logiques est passé de 1003285 à 6810. Il semblerait donc que le problème venait de là. Il ne me reste plus qu'à mettre en place une maintenance automatique. Je vais regarder sur la MSDN. Il faut donc je programme une mise à jour automatique des statistiques, une réorganisation et une reconstruction des index ? Y a-t-il autre chose ? Citation:
Merci pour votre aide. |
||||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() |
il y a aussi la compression du log mais cela n'a pas d'influence sur les performances.
http://blog.developpez.com/index.php...&c=1&tb=1&pb=1 Je suis content d'avoir pu vous aidé. A+ |
|
00
|
|
|
#5 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Pensez aussi à indexer CSS.CSS_DATE_EXP.
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
Copyright © 2000-2012 - www.developpez.com