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

Oracle Discussion :

Optimisation DELETE


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Par défaut Optimisation DELETE
    Oracle Server 9.2
    Je souhaite effectuer un DELETE important sur une BDD en production au sein d'une table contenant près de 20 millions d'enregistrements.
    Le problème est que cette opération prend un temps extrêmement important et conduit à l'écroulement des performances de la BDD pour les utilisateurs.
    Nous avons essayer d'effectuer l'opération en supprimant temporairement les contraintes sur la table concernée mais cela n'a rien changé.
    La base est en mode NOARCHIVELOG.
    Quelqu'un aurait-il une idée pour améliorer le temps d'exécution de la requête?
    Merci

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    combien de lignes supprimes-tu dans les 20 Millions ?

    Un méthode interessante est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE tab_new
    AS SELECT * FROM tab_a_supprimer
    WHERE <conditions de sauvegarde>;
     
    RENAME TABLE tab_a_supprimer TO tab_sav;
     
    RENAME TABLE tab_new TO  tab_a_supprimer;
     
    recréation des contraintes, triggers, indexes et grant
     
    DROP TABLE tab_sav; -- quand tout est OK
    Si tu ne peux pas te passer de la table même temporairement où que c'est trop contraignant, alors tu peux également supprimer les indexes et triggers avant de supprimer les lignes.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Par défaut
    Si tu ne peux pas appliquer la solution de Fred_D (tout le monde ne peux pas créer deux tables de 20 millions de lignes) et que tu veux que l'on t'aide, tu devrais:
    - nous donner des informations sur la table que tu veux supprimer (colonnes, clés, index, triggers, partitions,...)
    - nous donner des infos sur ton DELETE (requete précise, plan d'exécution, temps d'éxécution,...)

    A bon entendeur

  4. #4
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut
    est ce que la méthode de fred_d est vraiment intéressante, si on doit supprimer moins de 50% de la table ?

    j'ai en effet le même soucis avec une table, ou je dois retirer de temps à autre 3 millions de tuples sur un peu plus de 9.

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    là, il n'y a pas d'autres solutions que tester la méthode... je ne vois pas comment savoir si c'est mieux ou pire qu'un DELETE sans le vérifier

    Parce que pour optimiser un DELETE, je ne vois qu'un autre moyen, c'est de supprimer les indexes avant et les recréer ensuite.

    Donc :
    1°) méthode :
    - insert volume - 3 millions de ligne et create index

    2°) méthode
    - delete 3 millions de ligne et create index

    sachant que la 1° méthode ne consomme pas d'UNDO... donc plus de volume mais pas d'UNDO contre moindre volume avec UNDO... faut voir.

    Peut-on me confirmer par ailleurs que l'INSERT n'utilise pas le UNDO... parce que j'en suis pas certain

  6. #6
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut
    Citation Envoyé par Fred_D
    [...] Parce que pour optimiser un DELETE, je ne vois qu'un autre moyen, c'est de supprimer les indexes avant et les recréer ensuite.
    [...]
    En quoi le fait de retirer les indexes peut accélérer un DELETE ?

    De plus, je peux me tromper, mais il me semble que Oracle crée automatiquement un index sur les clés primaires, non ?

    Ce qui voudrait dire qu'il faudrait aussi faire sauter la clé ?

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

Discussions similaires

  1. [Optimisation] Delete beaucoup plus lent que select
    Par GyZmoO dans le forum Requêtes
    Réponses: 17
    Dernier message: 18/07/2017, 19h08
  2. Optimisation delete in
    Par nicotine dans le forum SQL
    Réponses: 6
    Dernier message: 14/06/2011, 11h41
  3. optimisation delete requete
    Par ekremyilmaz dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/04/2010, 10h52
  4. Optimiser delete sur table
    Par fulub dans le forum Administration
    Réponses: 13
    Dernier message: 16/06/2009, 22h05
  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