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

SQL Oracle Discussion :

DELETE Trop long


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 47
    Points : 36
    Points
    36
    Par défaut DELETE Trop long
    Salut,

    Je supprime plusieurs table avec de nombreuses lignes.

    Cela prend un temps monstrueux. Prés de 2 heures !?

    TRUNCATE ne peut pas fonctionner du fait de nombreuses FOREIGN KEY.

    Comment accélérer les choses !

    Merci.

  2. #2
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Bonjour,


    C'est une opération que tu fais au fil de l'eau ou bien une fois ponctuellement (genre purge de données) ?

    Ton perimètre de suppression est simple ou il est complexe à déterminer ? Tu peux poster ta requete ?

    Quelle proportion de ligne gardes tu ?

    Ce qui peut ralentir ta suppression : les triggers, les indexes...

    Si operation one shot, tu peux disabler les foreigns key qui pointent sur ta table, puis les triggers de cette table et ses indexes si tu es sur que tu peux te passer de ce que font les triggers éventuels.

    Si la proportion de ligne a garder est faible, tu peux créer une nouvelle table ne contenant que les données à garder et recréer dessus à la fin les indexes , triggers & contraintes de ta table initiales.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 47
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par lalystar Voir le message
    Bonjour,


    C'est une opération que tu fais au fil de l'eau ou bien une fois ponctuellement (genre purge de données) ?
    C'est une purge. J'efface l'intégralité des données, sauf les tables d'aides.

    Ton perimètre de suppression est simple ou il est complexe à déterminer ? Tu peux poster ta requete ?
    Ce sont juste des DELETE FROM MaTable;

    Quelle proportion de ligne gardes tu ?

    Ce qui peut ralentir ta suppression : les triggers, les indexes...
    Il y a de nombreuses clés étrangères.

    Si operation one shot, tu peux disabler les foreigns key qui pointent sur ta table, puis les triggers de cette table et ses indexes si tu es sur que tu peux te passer de ce que font les triggers éventuels.

    Si la proportion de ligne a garder est faible, tu peux créer une nouvelle table ne contenant que les données à garder et recréer dessus à la fin les indexes , triggers & contraintes de ta table initiales.


    Laly.
    Je sens que je vais tester le DROP sur les tables les plus longues..

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    C'est parce que tu fais pas tes truncates dans le bon ordre. Tu dois d'abord vider les tables filles et ensuite les mères et là tu pourras remplacer tes DELETE par des TRUNCATE

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 47
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par orafrance Voir le message
    C'est parce que tu fais pas tes truncates dans le bon ordre. Tu dois d'abord vider les tables filles et ensuite les mères et là tu pourras remplacer tes DELETE par des TRUNCATE
    Idem pour le delete, il faut effacer les tables filles en premier.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Sauf DELETE CASCADE

    Mais comme tu le fais pour le DELETE apparemment j'vois pas pourquoi tu fais pas un TRUNCATE

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 50
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par orafrance Voir le message
    C'est parce que tu fais pas tes truncates dans le bon ordre. Tu dois d'abord vider les tables filles et ensuite les mères et là tu pourras remplacer tes DELETE par des TRUNCATE
    Erreur, pour pouvoir faire un truncate sur une table, aucune foreign key ne doit référencer cette table (pas de tables filles).

    Solution :
    -1- désactiver toutes les foreign key (un peu plus simple que seulement celles nécessaires)
    -2- truncate de toutes les tables à purger
    -3- activation de toutes les contraintes désactivées

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Je ne me rappelais pas que même si les tables filles sont vides ça pose problème

    En plus les scripts d'activation/désactivation des contraintes est dispo sur le site

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 47
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par orafrance Voir le message
    Je ne me rappelais pas que même si les tables filles sont vides ça pose problème

    En plus les scripts d'activation/désactivation des contraintes est dispo sur le site
    Ok, j'ai trouvé les scripts. Une fois exécuté, le trucante fonctionne. Je passe de 45mn à 2mn.

    Merci beaucoup !

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

Discussions similaires

  1. delete trop long à cause d'une fk ou des stats oracle ?
    Par ekremyilmaz dans le forum Oracle
    Réponses: 2
    Dernier message: 22/12/2010, 16h29
  2. [DELETE]Beaucoup trop long
    Par bourbaki2003 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/12/2005, 10h29
  3. Chargement de page trop long
    Par t_o_7_ dans le forum ASP
    Réponses: 2
    Dernier message: 19/09/2003, 18h58
  4. [TComboBox] Contenu trop long pour la zone d'affichage
    Par bebeours dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/09/2003, 16h21
  5. Arrêter un prog si temps de connexion trop long
    Par jakouz dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2002, 18h28

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