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 :

Insert en masse concurrents [11gR2]


Sujet :

SQL Oracle

  1. #1
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut Insert en masse concurrents
    Bonjour,
    je dois effectuer dans le cadre d'un etl maison des imports en parallèle. Nous utilisons une base Oracle 11gr2 déployée sur un serveur avec 4 v cpu.
    Ma méthode est celle ci :
    J'élabore actuellement en mémoire la liste des insertions à faire en masse et exporte cela dans un fichier.
    ensuite je me sers du fichier comme d'une table externe et j'effectue un insert comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       insert into products (pid,pname, pcategoryid) select pid,pname, pcategoryid from table_ext123;
    pid représente la PK qui n'est normalement pas en base et propre au contenu de ce fichier.
    Le fichier contient environ 500 000 lignes.

    Tout est prévu pour que l'on puisse avoir en parallèle le même fonctionnement de telle manière qu'au final à instant T plusieurs process pourront exécuter séparément le même type de travail. Et donc avec à chaque fois des jeux de données uniques.

    On m'a indiqué que j'aurais probablement un problème de verrouillage de la table qui m'empêchera d'avoir recours à des insert en parallèle.
    J'ai essayé de m'y retrouver dans la documentation ici : http://www.sqlpac.com/referentiel/do...l#.WdeDUWi0PIV mais je suis un peu perdu.
    Est-ce qu'il y aura réellement un lock même si j'insère tout le temps des valeurs particulières qui ne se chevauchent pas ?
    Est-ce que les utilisateurs pourront continuer de requêter pendant que j'effectue mes imports ?

    Merci pour vos réponses,
    Lek

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Citation Envoyé par LEK Voir le message
    Est-ce qu'il y aura réellement un lock même si j'insère tout le temps des valeurs particulières qui ne se chevauchent pas ?
    Si la table cible est la même alors oui, il y aura un verrou de posé et les insert se feront les uns après les autres au gré des COMMIT/ROLLBACK
    N'étant pas expert, d'autres pourront certainement davantage t'aider sur la question mais il serait sans doute plus judicieux de paralléliser l'INSERT d'un fichier (Oracle gère alors la parallélisation de l'insertion d'un jeu de données complet) et de gérer séquentiellement le traitement de chaque fichier.

    Autre solution, charger en masse dans une table temporaire tous les fichiers (via SQL Loader par exemple) puis réaliser l'INSERT des données chargées (Avec la parallélisation gérée par Oracle)


    Citation Envoyé par LEK Voir le message
    Est-ce que les utilisateurs pourront continuer de requêter pendant que j'effectue mes imports ?
    Oui avec la vision des données en dehors de la transaction en cours (Insert en cours de chargement), donc les données "figées" à un instant T

  3. #3
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    J'ai fait quelque tests supplémentaires :
    - je pense qu'en fait utiliser une table externe comme je le fait est potentiellement plus efficient qu'utiliser sqlloader pour passer par une table de staging qui potentiellement n'ajoute pas grand chose.
    - par contre oui il semble bien qu'il y ait un lock du à la présence de l'index de ma PK et en fait les ordre d'insert sont mis en attente effectivement jusqu'au moment où le commit est réalisé. => j'imagine que si je veux du réel paralélisme (je suis en oracle standard edition), il va falloir que je trouve comment désactiver les index et les réactiver suite à l'insert en espérant ne pas prendre trop de risques...

    Merci en tous cas pour l'aide.

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

Discussions similaires

  1. Insertion en masse dans table de fait
    Par niiccoo dans le forum Oracle
    Réponses: 19
    Dernier message: 29/05/2006, 10h56
  2. [HIBERNATE] Problème d'insert de masse en HQL
    Par ange bleu dans le forum Hibernate
    Réponses: 9
    Dernier message: 20/04/2006, 09h39
  3. [Optimisation] Insert en masse
    Par bobic dans le forum Oracle
    Réponses: 1
    Dernier message: 14/12/2005, 21h11
  4. [9i] Insertion de masse
    Par sygale dans le forum SQL
    Réponses: 2
    Dernier message: 05/12/2005, 09h51
  5. [Optimisation] Insertion en masse !
    Par m-mas dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/10/2005, 16h40

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