|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre à l'essai
![]() Inscription : juin 2008 Messages : 60 ![]() |
Bonjour,
J'essaie d'optimiser une requête SQL qui est passé de 15 minutes à plus de 150 minutes. La requête update certains champs de la table T_CIBLE par les champs de la table T_SOURCE. La table T_CIBLE contient 4 millions de lignes et est indexer sur les champs ID_1 et ID_2. La table T_SOURCE 2 Millions de lignes. le merge est le suivant : Code :
Code :
Code :
Merci par avance ! |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
Avez vous essayé avec un simple UPDATE ? parce que là je ne voit pas l'intérêt d'un merge !
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
|
|
|
#3 | ||||
|
Membre à l'essai
![]() Inscription : juin 2008 Messages : 60 ![]() |
Merci pour ta réponse SQLPro !
Dans ma tête, depuis la version 10G, un Merge était toujours plus efficace qu'un update. Mais en faisant comme tu m'as dit, voici le merge transformé en update : Code :
Code :
|
||||
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 4 108 ![]() |
La première requête est exécutée en parallèle mais dans son ensemble le plan d’exécution est le même : merge via un hash join entre les deux tables accédées en full. Ce n’est pas forcement un mauvais plan.
Vous dite que la requête est passée du 15 minute à 150 mais que est-ce que a changé entre les deux exécutions ? Avez-vous une idée ? Est vous certain que les enregistrements à mettre à jour ne sont pas verrouillé par un autre processus ? Pour l’instant essayez de tester la requête sans exécution en parallèle. Activez une trace sql étendue, laissez tourner la requête un certains temps et ensuite tuez le processus qui l’exécutez. Analysez le fichier de trace pour voir sur quoi elle attente. Une autre piste : parfois au lieu de mettre à jour une grosse table il est plus intéressant de créer une nouvelle table via create as select et de supprimer la ancienne table et la remplacer par la nouvelle. Du ce point de vue quelle est le temps d’exécution de la requête qui ramène les données des la jointure entre la table T_Source et T_Cible. Quelle est son plan d’exécution ? |
|
|
10
|
|
|
#5 | |||
|
Membre à l'essai
![]() Inscription : juin 2008 Messages : 60 ![]() |
Bonjour mnitu,
Tout d'abord j m'excuse pour le retard de ma réponse. J'ai bien essayé d'avancer sur le sujet mais vraiment je sèche... Citation:
Citation:
Citation:
|
|||
|
|
00
|
|
|
#6 | ||||
|
Expert Confirmé Sénior
![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 4 108 ![]() |
Code :
Code :
|
||||
|
|
00
|
|
|
#7 | ||||||
|
Membre éprouvé
![]() |
Hello Twixi
Tu peux essayer ceci et mettre le plan d'éxécution? Code :
Code :
Code :
Sinon: ORA-01779: cannot modify a column which maps to a non key-preserved table jko
__________________
OCP 11g, RAC and Performance & Tuning Expert 11g RMAN Backup & Recovery, Data Guard and Grid Control |
||||||
|
01
|
|
|
#8 |
|
Inscription : juillet 2012 Messages : 21 ![]() |
hey
Pour reprendre le premier post de mnitu, moi aussi le plan je le trouve pas mal. Peux-tu nous dire ce que tu as comme machine, le nombre de processeurs, mémoire, serveur dédié ou mutualisé? on est passé de 15min à 150min toutes choses étant égales d'ailleurs? (identité de volume traité, code, définition de structures, environnement, mémoire et cpu dispo??) moi j'essaierais de :
Joyeux Noël, et comme dit un collègue, si vous avez les boules en ce moment, arrêtez-vous, et accrochez-les au sapin... |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com