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

PL/SQL Oracle Discussion :

Optimisation d'un delete


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 107
    Points : 89
    Points
    89
    Par défaut Optimisation d'un delete
    Bonjour à tous,

    Je doit faire un delete (environ 2 millions de lignes) sur une table d'environs 40 millions de lignes.

    J'utilise la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE FROM maTableWHERE maColonne IN (ids);
    Je voudrais savoir s'il n'est pas possible d'optimiser celle-ci...

    Avez_vous des idées ?

    Merci !

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ça dépend, la suppression a-t-elle des incidences sur l'intégrité de la base ou bien est-ce que vous pouvez faire par lots (par exemple, une table de logs ou d'événement peut être traitée par lot).

    Votre table possède-t-elle des index et des contraintes d'intégrités ?
    Comment identifiez-vous les ids à supprimer ?

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 107
    Points : 89
    Points
    89
    Par défaut
    Merci @Waldar pour ta réponse.

    Oui, ma table contient contraintes et index.

    Les Ids à supprimer sont identifiés via une méthode java puis envoyer à la requête...DELETE...

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    "maColonne" est indexée ?

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 107
    Points : 89
    Points
    89
    Par défaut
    Salut @mnitu !

    Oui, "maColonne" est indexée !

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Ca prends combien de temps actuellement ? Et quel est la fenêtre de temps acceptable pour cette suppression ?
    D'autre part il n'y a pas de miracle en soit: la présence des contrainte impose leur vérification, la présence des indexes implique leur gestion, la présence des éventuels triggers implique leur exécution, en plus de la génération de redo et undo.
    Travaillez par lots ne réduit pas le temps total d'exécution.
    Regardez aussi le plan d'exécution pour analyser comment l'accès aux données est fait.
    Peut être envisager un traitement en parallèle si la machine est assez puissante.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 107
    Points : 89
    Points
    89
    Par défaut
    Merci pour ta réponse !

    Je te retournes ta question (si tu me le permet ) : quel est la fenêtre de temps acceptable pour une suppression de 2 Millions de lignes ?

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Si pendant deux jours un batch peut tourner et supprimer les 2 millions de lignes alors c'est une fenêtre de temps acceptable si cela ne pose pas des autres problèmes.
    Si derrière l'application il y a un utilisateur qui supprime 2 millions de ligne et il attend la fin de la suppression et cette suppression prends 2 minute il est très probablement inacceptable pour le client. Très probablement il faut repenser cette action dans l'application.
    Si le batch qui tourne a une fenêtre de 20 minute maximum pour supprimer les 2 millions de ligne alors le but de l'optimisation est que ça passe en moins de 20 minutes.
    C'est votre application qui vous dit ce qu'il est acceptable ou pas.

  9. #9
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par lachik Voir le message
    Les Ids à supprimer sont identifiés via une méthode java puis envoyer à la requête...DELETE...
    Je pense que la lenteur peut venir de là, en fait il y a 2000 DELETE, n'est-ce pas ?
    Il pourrait être préférable de charger ces id dans une table (temporaire ou pas) puis supprimer en une commande.

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 107
    Points : 89
    Points
    89
    Par défaut
    Bonjour @skuatamad, merci de t'intéresser à mon problème

    En fait, dans mon cas de test "ids" fait référence à un seul id qui lui-même identifie les 2 millions de lignes à supprimer.

  11. #11
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par lachik Voir le message
    Oui, ma table contient contraintes et index.
    Y a-t-il des contraintes on delete cascade qui référence cette table ?
    Si oui supprimez les données filles avant.

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 107
    Points : 89
    Points
    89
    Par défaut
    Nop, pas de delete cascade...

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 107
    Points : 89
    Points
    89
    Par défaut
    Une question me vient...
    Comment se comporte Oracle lorsque plusieurs utilisateurs font des delete une une même table ? Il y a t-il une notion de file ?

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 107
    Points : 89
    Points
    89
    Par défaut
    une petite idée ?

  15. #15
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 107
    Points : 89
    Points
    89
    Par défaut
    ok, j'ai compris grace aux locks de table Oracle.

    Merci quand même

  16. #16
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Si les deux sessions suppriment des enregistrements différentes de la même table en même temps chaque session fait sont travail. Quand les deux sessions suppriment (une partie) des enregistrements communes une des sessions doit attendre la fin de la transaction initié par l'autre session qui a déjà modifié l'enregistrement.

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 107
    Points : 89
    Points
    89
    Par défaut
    Oui, c'est exactement ca !
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimisation DELETE
    Par poups dans le forum Oracle
    Réponses: 25
    Dernier message: 29/11/2010, 11h24
  2. Optimisation Update ou Delete + Insert
    Par Invité dans le forum Requêtes
    Réponses: 8
    Dernier message: 31/12/2009, 14h59
  3. Optimisation d'un delete
    Par Christophe Charron dans le forum Requêtes
    Réponses: 5
    Dernier message: 21/12/2008, 23h04
  4. Optimisation d'un delete
    Par niiccoo dans le forum Oracle
    Réponses: 11
    Dernier message: 29/05/2006, 10h57
  5. Optimisation de DELETE
    Par RitonLaBevue dans le forum Requêtes
    Réponses: 5
    Dernier message: 02/11/2005, 15h31

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