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 de la commande INSERT


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Par défaut Optimisation de la commande INSERT
    Bonjour,

    J'ai besoin d'insérer plus de 6 millions de records dans une table (partitionnée). Pour l'instant mon script ne fait que des commandes INSERT normaux...et ceci me prend à peu près 2h pour tout charger !!

    Y a t-il un moyen pour optimiser mes insertions?

    (Les indexes sur ma table sont supprimés avant l'insertion, recrées après)

    Merci d'avance.

  2. #2
    Membre expérimenté
    Inscrit en
    Janvier 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 135
    Par défaut
    Beaucoup de insert ... values ou un insert ... select? Si insert ... select, optimisez select (la requête) et utilisez insert /*+ append */.

    Quelle est la principale wait event pendant l'insert?
    select event, p1, p2, p3 from v$session_wait where sid = ...

  3. #3
    Expert confirmé 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
    Par défaut
    Citation Envoyé par labolabs Voir le message
    Bonjour,

    J'ai besoin d'insérer plus de 6 millions de records dans une table (partitionnée). Pour l'instant mon script ne fait que des commandes INSERT normaux...et ceci me prend à peu près 2h pour tout charger !!

    Y a t-il un moyen pour optimiser mes insertions?
    Oui! Mais, il va falloir donner un peu plus d'informations sur le traitement: d'où le données provient, comment les insert sont fait, etc.

  4. #4
    Membre confirmé
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Par défaut
    Voici le scénario de mon script:

    1 - Je récupère les données à partir d'une table T1
    2 - Je fais des contrôles sur les champs de T1
    3 - Si tous les contrôles sont valides, je fais un INSERT INTO T2 VALUES ...

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Quel genre de contrôles ?
    Si ce sont des contrôles SQL, vous pouvez les intégrer directement à la requête initiale, puis tout insérer dans votre table en mode APPEND.

  6. #6
    Expert confirmé 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
    Par défaut
    Bref, il manque encore quelques infos...
    Voici un lien qui explore l'utilisation des fonctions pipelined comme solution. Mais, dans un premier temps vous pouvez peut être vous limitez à l'utilisation du bulk et forall (si votre script est en PL/SQL bien sur).

  7. #7
    Membre confirmé
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Par défaut
    Merci pour vos réponses. Oui il s'agit de contrôles SQL, du genre:

    * Si Champ 1 est NULL
    * Si Champ 2 > Champ 3
    * Si Champ 4 NOT IN (...) etc.

    Le souci est qu'il y à peu près 100 contrôle de ce genre !! tout mettre dans une seule requête n'est pas la bonne idée à mon avis...

    Je vais essayer l'insertion en mode APPEND puis les fonctions pipelined et tester les performances...Je vous tiens au courant du résultat.

  8. #8
    Membre expérimenté
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Par défaut
    Au fait, un petit détail, le more insert /*+ APPEND */ ne fonctionne pas avec la clause values, seulement avec des insert select...

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

Discussions similaires

  1. syntaxe commande INSERT INTO
    Par hottnikks_79 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 13h52
  2. Réponses: 3
    Dernier message: 25/10/2006, 17h45
  3. la commande insert into et le type serial
    Par nael_n dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 28/08/2006, 11h16
  4. form6i la commande insert->?
    Par seif_eddine dans le forum Forms
    Réponses: 5
    Dernier message: 07/06/2006, 00h03
  5. Delphi - Mysql 5.0 et commande insert
    Par zorville dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/04/2006, 17h59

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