Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/05/2008, 10h46   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 93
Points : 10
Points : 10
Par défaut Optimisation requête delete

Bonjour,

J'ai la requête suivante qui dure plus de 20 heures, j'ai essayé d'optimiser par l'ajout de hint, c'est identique :
Code :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
BEGIN
        LOOP
                UPDATE purge_dealfront_intermediaires
                SET     STATUS ='1'
                WHERE   STATUS ='0'
                    AND rownum<=1000;
                EXIT
        WHEN SQL%ROWCOUNT = 0;
                COMMIT;
                DELETE
                FROM    eai_t_ver_dea_fo
                WHERE   idt IN
                        (SELECT idt
                        FROM    purge_dealfront_intermediaires
                        WHERE   STATUS = '1'
                        );
                DELETE
                FROM    eai_t_ver
                WHERE   idt IN
                        (SELECT idt_ver
                        FROM    purge_dealfront_intermediaires
                        WHERE   STATUS = '1'
                        );
                DELETE
                FROM    eai_t_tit
                WHERE   idt IN
                        (SELECT idt_tit
                        FROM    purge_dealfront_intermediaires
                        WHERE   STATUS = '1'
                        );
                DELETE
                FROM    eai_t_tie
                WHERE   idt IN
                        (SELECT idt_tie_brk
                        FROM    purge_dealfront_intermediaires
                        WHERE   STATUS = '1'
                        );
                DELETE
                FROM    eai_t_tie
                WHERE   idt IN
                        (SELECT idt_tie_dep
                        FROM    purge_dealfront_intermediaires
                        WHERE   STATUS = '1'
                        );
                DELETE
                FROM    eai_t_tie
                WHERE   idt IN
                        (SELECT idt_tie_ctp
                        FROM    purge_dealfront_intermediaires
                        WHERE   STATUS = '1'
                        );
                DELETE
                FROM    eai_t_tie
                WHERE   idt IN
                        (SELECT idt_tie_cl
                        FROM    purge_dealfront_intermediaires
                        WHERE   STATUS = '1'
                        );
                DELETE
                FROM    eai_t_trc
                WHERE   idt_ver IN
                        (SELECT idt
                        FROM    purge_dealfront_intermediaires
                        WHERE   STATUS = '1'
                        );
                COMMIT;
                UPDATE purge_dealfront_intermediaires
                SET     STATUS='2'
                WHERE   STATUS='1';
                COMMIT;
        END LOOP;
EXCEPTION
WHEN OTHERS THEN
        ROLLBACK;
        INSERT
        INTO    EAI_T_LOG_PURGE VALUES
                (
                        'deafo/drop_intermediaires.sql',
                        'ERROR'                        ,
                        'Drop failed'                  ,
                        'DF'                           ,
                        SYSDATE
                );
        COMMIT;
        RAISE;
END;
/


Auriez-vous une idée?

Merci

Bonne journée

Bibi
bibi92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 11h14   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Fait une trace SQL pour avoir plus d'informations sur ce qui se passe.
Mais vue l'algorithme utilisé je pense qu'il doit y avoir des autres moyens à parvenir au même résultat.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 11h40   #3
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Merci de formater le code à l'avenir : http://www.sqlinform.com/

Tu peux expliquer le but du code parce qu'en effet, ça doit pouvoir se simplifier
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 12h14   #4
Membre confirmé
 
Avatar de JerryMouse
 
Homme N'Guessan KOUAME
Inscription : avril 2002
Messages : 210
Détails du profil
Informations personnelles :
Nom : Homme N'Guessan KOUAME
Localisation : Côte d'Ivoire

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 210
Points : 270
Points : 270
Envoyer un message via MSN à JerryMouse Envoyer un message via Yahoo à JerryMouse
Je pense qu'en créant simplement des indexes, tu peux résoudre ton pb de lenteur.
__________________
Très souvent, le plus difficile est de savoir ce que l'on veut.
JerryMouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 12h15   #5
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
Afin d'éviter les FULL SCAN sur les tables cibles : Est-ce que toutes tes colonnes de liaison (eai_t_*.idt) sont indexées ?

Afin de n'utiliser que des indexs pour les tables filels : Est-ce que tu as des indexs multi-colonnes pour tes tables filles (status+idt_*) ?

Petite optimisation : Tu peux également grouper tes 4 "DELETE FROM eai_t_tie ..." en utilisant un UNION des 4 tables filles.
philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 14h44   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 458
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 458
Points : 4 225
Points : 4 225
Pourquoi passer par une boucle ?
Pourquoi initialiser à 1 ?
Il faut vérifier chaque requête pour voir les accès (Un index sur PURGE_DEALFRONT_INTERMEDIAIRES.STATUS

Moi je ferais tous les updates
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DELETE	 EAI_T_VER_DEA_FO a
		WHERE EXISTS 
				(SELECT 1
				FROM    PURGE_DEALFRONT_INTERMEDIAIRES b
				WHERE   b.STATUS = '0'
				AND 	b.idt = a.idt);
 
..
 
UPDATE PURGE_DEALFRONT_INTERMEDIAIRES
SET     STATUS='2'
WHERE   STATUS='0';
 
COMMIT;
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 15h32   #7
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Citation:
Envoyé par McM Voir le message
Pourquoi passer par une boucle ?
Pourquoi initialiser à 1 ?
...
Ha, ha, parce que ils sont « prévoyants ». Et si il n’y pas assez d’espace de rollback ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 17h59   #8
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 93
Points : 10
Points : 10
Exact, pas assez de rollback.
Une idée?
bibi92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 18h02   #9
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 458
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 458
Points : 4 225
Points : 4 225
Citation:
Envoyé par bibi92 Voir le message
Une idée?
Les index, les explain ?
Ce sont des idées fournies, faut que tu travailles dessus.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2008, 10h02   #10
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Citation:
Envoyé par bibi92 Voir le message
Exact, pas assez de rollback.
Une idée?
Et avez vous essayé d'estimer le besoin ou c'est comme ça au pif ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 17h43   #11
Membre habitué
 
Inscription : février 2006
Messages : 139
Détails du profil
Informations personnelles :
Âge : 37
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2006
Messages : 139
Points : 126
Points : 126
Bonjour,

Il n'y aurait pas des LOCKs?

cdt
kervoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2008, 12h13   #12
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 93
Points : 10
Points : 10
Par défaut Tests

Aucun lock, j'ai fait différents tests et les temps de réponse sont les mêmes.
Peut-être, faut-il récréer les index?

Merci

Bonne fin de journée
bibi92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2008, 13h57   #13
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Citation:
Envoyé par bibi92 Voir le message
Aucun lock, j'ai fait différents tests et les temps de réponse sont les mêmes.
Peut-être, faut-il récréer les index?

Merci

Bonne fin de journée
Peut être il faut faire un TKPROF pour savoir ce qui se passe à la place d'essayer de devigner!
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h55.


 
 
 
 
Partenaires

Hébergement Web