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 :

Changement de PK => Delete très long


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Changement de PK => Delete très long
    Bonjour,

    J'ai modifié la clé primaire d'une table, pour la passer de 3 colonnes (varchar2 / date / number) à une seule colonne, une séquence numérique tout ce qu'il y a de plus normal.

    Lorsque je fais une requête delete, en passant sur cette nouvelle clé primaire, la suppression met 36secondes. Avant cette modification de clé primaire, il y avait un index sur CODECR, et le delete par CODECR était instantanné.
    Quelqu'un aurait-il une explication, une piste à explorer pour expliquer ce temps de traitement ?


    Je mets des infos sur les manips que j'ai faites.
    Il s'agit d'une table ECR, avec comme colonnes
    IDECHA VARCHAR2(3)
    DTEECR DATE
    HORECR NUMBER(4)
    CODECR NUMBER(8) (<= séquence)
    [...]

    La PK était :
    ALTER TABLE ECR ADD ( CONSTRAINT PK_ECR
    PRIMARY KEY (IDECHA, DTEECR, HORECR)
    C'est désormais
    ALTER TABLE ECR ADD ( CONSTRAINT PK_ECR
    PRIMARY KEY (CODECR)
    - j'ai recréé un index sur l'ancienne PK IDECHA/DTEECR/HORECR
    - un index unique existe sur CODECR d'après l'onglet Script de TOAD.
    - j'ai fait une reprise de données pour les tables filles
    - j'ai recalculé les stats sur tout le schéma

    Malgré tout, un delete par codecr est très long.

    Quel pourrait-être le problème ?
    S'il manque des éléments, j'éditerai mon message après vos demandes.

    Merci par avance

  2. #2
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Tu peux dropper tous les index sauf celui de la PK et tenter un delete ? Pour voir si c'est la MAJ des index qui ralentit.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    J'ai droppé 9 Index (pour 48 colonnes), et n'ai laissé que celui de la PK.
    La suppression par delete sur CODECR dure toujours 36secondes.

  4. #4
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    Pourrais-tu nous donner l'ordre SQL qui pose problème et l'explain plan qui va avec ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    La requête :

    delete from ecr where codecr=2912185
    L'explain plan :



    A noter qu'un update ou un select est instantanné !

    J'avais modifié les clés étrangères des tables qui pointent vers ecr, en créant au préalable une colonne CODECR, puis en reprenant les données.
    Je vais supprimer ces clés étrangères des tables qui pointent vers ecr, peut-être ces lenteurs sont-elles dues à des contrôles sur les tables filles ?


    Résultat :
    En supprimant la clé étrangère de la plus grosse table pointant vers ECR, la suppression passe à 7 secondes.
    En supprimant l'ensemble des clés étrangères CODECR, la suppression devient immédiate.

    Le problème étant maintenant identifié, quelles sont les pistes de résolution ?
    Y a-t-il des manipulations à faire sur les tables ou à la création des clés étrangères pour que le traitement soit plus rapide ?

  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
    Citation Envoyé par beubeu40 Voir le message
    ...Résultat : en supprimant la clé étrangère de la plus grosse table pointant vers ECR, la suppression passe à 7 secondes.
    ...
    Très probablement que la contrainte est de type ON DELETE CASCADE. 7 secondes pour une suppression par index unique est énorme. Exécutez la suppression avec une trace SQL pour avoir une vision complète de ce qui se passe.

  7. #7
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    Il y a des indexes sur les tables filles pour les colonnes des FK ?

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Il me semble que non, je regarde, je recrée mes FK et je les indexe, et je reviens vous signaler si ça résout mon problème.
    Gros oubli..

  9. #9
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Mais on peut faire une clé étrangère qui cible une colonne qui n'a pas un index unique ou une clé primaire ?
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  10. #10
    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
    Citation Envoyé par nuke_y Voir le message
    Mais on peut faire une clé étrangère qui cible une colonne qui n'a pas un index unique ou une clé primaire ?
    Je pense qu'il parle d'indexer les clés étrangères.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Oui je parle de la clé étrangère elle-même qui n'est pas indexée, et non la colonne cible.
    J'ai rechargé un dump, mon script de modification de clés et reprise de données est en train de tourner, je vous redis ça d'ici une heure.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Problème résolu, la suppression est maintenant immédiate.

    Il manquait donc des index sur les nouvelles clés étrangères CODECR.
    J'ajoute la création de ces index dans mon script, après la reprise de données sur CODECR.

    Merci à tous !

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

Discussions similaires

  1. [10gR1] Delete très long (+ de 20 heures)
    Par marc85 dans le forum Administration
    Réponses: 12
    Dernier message: 23/07/2013, 19h34
  2. DELETE très long sur grosse table partitionée
    Par glutock dans le forum SQL
    Réponses: 3
    Dernier message: 28/04/2008, 10h47
  3. [Oracle9i] Delete très long
    Par MoitieDeCigare dans le forum Oracle
    Réponses: 15
    Dernier message: 27/11/2006, 10h35
  4. delete très long
    Par slefevre01 dans le forum Oracle
    Réponses: 7
    Dernier message: 06/10/2005, 13h16
  5. Très long texte dans Quick Report - Comment faire ?
    Par delphi+ dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/08/2005, 22h18

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