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 10/06/2011, 13h58   #1
Invité de passage
 
Inscription : avril 2006
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 13
Points : 0
Points : 0
Par défaut Optimisation delete in

Bonjour,

J'ai des temps de traitements lors du passage d'un pl_sql sur cette requete... J'aimerai l'optimiser car on l'a arrêté au bout de 12h de traitement alors qu'avant la modif, elle prenait quand même 1h30... c'est assez urgent, j'ai suspendu le traitement hier soir mais il doit tourner ce week end.

Code :
1
2
3
4
5
6
7
8
9
DELETE FROM table1 b
 WHERE (cle11,cle12,cle13,cle14,cle15,cle16,cle17)
    IN (SELECT cle21, cle22, 'G', cle24, cle25, cle26, 0
          FROM table2 p
         WHERE p.cle11       = b.cle21 
           AND p.cle12       = b.cle22
           AND p.cle14       = b.cle24 
           AND p.champsdate >= trunc(sysdate-8,'DD')
           AND p.cle15       = 1);
Je pense que c'est le "in" qu'il n'aime pas et je suis sur une partie de la clef de table2, lorsque j'étais sur une clef supplementaire dans mon select, les temps de reponse était longs mais 1h30 au lieu de 12h.

MERCI d'avance pour votre aide...
nicotine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 14h12   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 311
Points : 5 810
Points : 5 810
Volumétrie ? Présences des indexes ? Version Oracle ? Statistiques à jour ?
Comme ça au pif si vous avez un bon index réécrivez votre delete
Code :
1
2
3
4
5
6
7
8
 
DELETE table1 a
  WHERE EXISTS (SELECT NULL 
                        FROM table2 b
                      WHERE a.cle1 = b.cle1
                          AND a.cle2 = b.cle2
                     ...
                    )
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/06/2011, 14h29   #3
Invité de passage
 
Inscription : avril 2006
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 13
Points : 0
Points : 0
Effectivement

Les index et les stat sont à jour.

la table 1 fait 830000 lignes et la table 2 la 400000 lignes...

Merci pour votre aide, je teste ca.
nicotine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 14h56   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 311
Points : 5 810
Points : 5 810
Une 1h30 pour supprimer au pire 800000 enregistrements c'est énorme. Avez achetez l’option Oracle Very Slow Database ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 15h21   #5
Membre expérimenté
 
Homme Mohamed Houri
Inscription : mars 2010
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Mohamed Houri
Localisation : France

Informations forums :
Inscription : mars 2010
Messages : 286
Points : 563
Points : 563
Citation:
Envoyé par nicotine Voir le message
Effectivement

Les index et les stat sont à jour.

la table 1 fait 830000 lignes et la table 2 la 400000 lignes...

Merci pour votre aide, je teste ca.
Bonjour,

Y a t-il des triggers sur cette table?
Existe t-il des tables filles (child tables) pour la table 1
Effectivement, de nos jours c'est un volume très petit que vous voulez supprimer.

Essayez ceci pour avoir une idée de ce que fait le CBO
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
 
mhouri> EXPLAIN plan FOR DELETE FROM emp WHERE empno = 7839;
 
Explained.
 
mhouri> SELECT * FROM TABLE(dbms_xplan.display);
 
PLAN_TABLE_OUTPUT                                                                                   
----------------------------------------------------------------------------------------------------
Plan hash value: 2332860015                                                                         
 
-----------------------------------------------------------------------------                       
| Id  | Operation          | Name   | Rows  | Bytes | Cost (%CPU)| Time     |                       
-----------------------------------------------------------------------------                       
|   0 | DELETE STATEMENT   |        |     1 |    13 |     0   (0)| 00:00:01 |                       
|   1 |  DELETE            | EMP    |       |       |            |          |                       
|*  2 |   INDEX UNIQUE SCAN| EMP_PK |     1 |    13 |     0   (0)| 00:00:01 |                       
--------------------------------------------------------------------------                      
 
Predicate Information (IDENTIFIED BY operation id):                                                 
 
---------------------------------------------------                                                
 
   2 - access("EMPNO"=7839)                                                                         
 
14 rows selected.
Mohamed Houri
Mohamed.Houri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 15h33   #6
Invité de passage
 
Inscription : avril 2006
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 13
Points : 0
Points : 0
Merci pour vos réponses et votre aide.

Mon cas est particulier et j'ai réussi à m'en sortir en faisant un gros delete sur une partie de la clef et le meme delete qu'avant qui supprime beaucoup moins de données donc très rapide...

Concernant l'option, je ne sais pas répondre, c'est pour ma boite et c'est le DBA qui gére tout ca...

Un grand merci à vous... Le traitement passe cette nuit, croisez les doigts et merci beaucoup...
nicotine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h41   #7
Futur Membre du Club
 
Inscription : mai 2009
Messages : 35
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mai 2009
Messages : 35
Points : 17
Points : 17
Envoyer un message via MSN à lidybekham07 Envoyer un message via Yahoo à lidybekham07
pour la lenteur dans la suppression la table 1
est ce que il existe une autre table ou la cle primaire de la table 1 est une cle étrangère si c'est le cas et si cette deuxième table est volumineuse à chaque suppression il vérifiera l’existence de cette clé.
donc si t'es sure que tt les clé sont supprimé de la table 2 désactive la clé étrangère et lance la suppression
lidybekham07 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 04h54.


 
 
 
 
Partenaires

Hébergement Web