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 :

[9i] Sort Output lors d'un Insert


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert 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
    Par défaut [9i] Sort Output lors d'un Insert
    Bonjour j'ai un comportement qui m'étonne (mais qui est peut-être normal) dans ma base.

    Je suis en train de faire tourner un traitement mensuel qui delete puis insère OU update des lignes en masse dans une table. Cad qu'il essaye d'updater, et si le nombre de lignes mises à jour = 0, il insère.

    Je manipule environ 300 000 lignes, et dans le cas actuel j'efface environ 300 000 lignes (les anciennes), j'insère 300 000 lignes (les nouvelles) et n'en update aucune (car aucune des nouvelles lignes n'existe dans les anciennes non effacées).

    Je génère les inserts un par un et je commit tous les 10 000 inserts.

    Ce qui m'étonne c'est que sous OEM, il m'affiche dans les opérations longues des sort Output assez longs (genre 6/7 mn).

    Le plan d'exécution ne me parle que d'un INSERT STATEMENT avec un coût de 364, 398 855 lignes et 21 033 Ko.

    Je n'avais jamais regardé de près ces traitements là, et je trouvais normal qu'il passe 20mn à insérer 300 000 lignes mais d'un seul coup je me pose un peu des questions...

    Pour info la table dans laquelle il insère a environ 400 000 lignes (il en reste toujours un peu des fois précédentes en gros).

    Il y a :
    1 PK sur 4 champs
    7 index (pour clés étrangères d'autres tables référençant celle là).
    Pas de trigger

    Si vous pouvez m'éclairer un peu (déjà savoir si c'est normal ou pas). Merci

  2. #2
    Membre Expert 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
    Par défaut
    Hum j'ai ptet compris.

    Il fait la requête de sélection des données sources. Puis dès les premières données il commence l'update/insert dans la cible. Mais pendant ce temps il continue à ramener des données. Ce qui fait que je ne vois que l'INSERT dans le plan d'exécution mais l'opération de sort output que je vois est celle de la requête de sélection des données sources.

    C'est ça ?

  3. #3
    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
    je ne sais pas ce qui se passe mais j'espère que tu utilises le BULK COLLECT pour faire ça

  4. #4
    Membre Expert 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
    Par défaut
    Non pas du tout.

    On peut utiliser le bulk collect dans un cas pareil ? Je pensais que c'était pour une série d'insertion en masse ? Moi j'ai besoin de savoir si l'update a eu lieu ou pas, si l'insertion s'est bien passée, etc.

    Je suis obligé de travailler ligne par ligne.

  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
    Ha oui... tu as raison... mais tu pourrais t'en sortir en remplaçant tout ça par un MERGE

  6. #6
    Membre Expert 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
    Par défaut
    Oui c'est vrai MAIS ça c'est le code généré par un ETL qui ne connaît pas les merge (compatibilité multi-SGBD oblige).

    Bon sinon ça semble cohérent ce que j'ai dit dans mon 2e post ?

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

Discussions similaires

  1. [BDE] Echec de contrôle lors d'une insertion
    Par rbag dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/11/2004, 09h57
  2. PB date lors d'une insertion en Base.
    Par NATHW dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/09/2004, 17h53
  3. [ACCESS] Connaitre l'autoincrement lors d'un INSERT
    Par Benjamin GAGNEUX dans le forum Bases de données
    Réponses: 17
    Dernier message: 25/06/2004, 22h49
  4. Réponses: 4
    Dernier message: 24/06/2004, 12h13
  5. maj d'1 colonne avec la date du jour lors de l'INSERT
    Par Celina dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/12/2003, 15h03

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