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 :

grand nombre d'insert


Sujet :

Oracle

  1. #1
    Membre habitué Avatar de whilecoyote
    Inscrit en
    Novembre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 154
    Points : 149
    Points
    149
    Par défaut grand nombre d'insert
    Bonjour,
    Je developpe actuellement une application (java) qui réalise un grand nombre d'insert: environ 2 millions par jour.
    D'ou ma question, comment améliorer la vitesse des insert, est ce que je peux faire qqch au niveau de mon code ou le dba est il le seul a pouvoir faire qqch?
    J'ai remarqué que l'utilisation de séquence ralentisé les inserts. Existe-il un autre moyen de génerer une clef unique si on souhaite pouvoir faire des inserts parallèles?

    J'utilise actuellement oracle 9.

    Merci d'avance pour votre aide
    Coyote.

  2. #2
    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
    la séquence est le moyen le plus rapide de générer une nombre unique. En revanche tu peux réduire le nombre de contraintes (les foreign keys par exemple) et supprimer les indexes de la table pour gagner du temps MAIS les indexes accélèrent la lecture donc il faut les recréer et les foreign keys sont garantes de l'intégrité des données c'est donc pas anodin de les désactiver

  3. #3
    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
    Il n'y a pas de moyen plus rapide de générer une clé unique.

    Tu peux éventuellement mettre l'option cache ou l'agrandir sur ta séquence.

    Si ton tablespace est en LMT avec ASSM c'est ok. Sinon tu peux essayer d'augmenter le nb de freelist sur ta table.


    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...)

  4. #4
    Membre habitué Avatar de whilecoyote
    Inscrit en
    Novembre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 154
    Points : 149
    Points
    149
    Par défaut
    J'ai augmenté la taille du cache mais l'effet semble limité (il n'y a pas de différences entre un cache de 100 et un cache de 1000 ).
    A mon boulot on m'a parler d'outils permettant de faire des insertions massive de données?
    Connaissez vous ces outils et est il possible de les utiliser depuis un programme java ?

  5. #5
    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
    Je te donne une astuce : si tu peux, groupe tes inserts. Si tu peux balancer par paquet de 1000 inserts, tu réduiras tes temps par 100 (environ).

    Par contre tu perds la gestion ligne à ligne, cad que tu sauras qu'un Insert aura été rejeté, mais pas lequel.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  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
    ces outils font également des inserts, je vois mal comment ils pourraient être plus rapide

  7. #7
    Membre habitué Avatar de whilecoyote
    Inscrit en
    Novembre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 154
    Points : 149
    Points
    149
    Par défaut
    La question peut sembler idiote mais qu'appel tu des "groupes d'insert"?
    Est-ce que ce sont des inserts que tu commit ensemble ou une commande insert qui fait plusieurs insert d'un seul coup ?

  8. #8
    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
    la question est : "est-ce possible en Java ?".

    Renseigne toi mais il doit être possible de balancer plusieurs insert en un seul statement. Donc au lieu d'écrire un insert dans ton programme, de l'envoyer à la BDD, d'attendre la réponse, puis de continuer, tu dois pouvoir grouper tes inserts et ainsi gagner énormément de temps à la soumission des statements.

    Les outils qui font ça sont des ETL (par exemple) et ils font bien la différence entre Insert par paquets et Insert Single. Et au niveau temps c'est du 1%.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  9. #9
    Membre habitué Avatar de whilecoyote
    Inscrit en
    Novembre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 154
    Points : 149
    Points
    149
    Par défaut
    J'utilise hibernate pour tous ce qui est persistence.

    Penses tu qu'en créant une transaction pour faire mes inserts et donc en commitant les inserts seulement à la fin de la transaction je vais augmenter les performances?

  10. #10
    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
    oui, un seul commit va faire gagner du temps

  11. #11
    Membre habitué Avatar de whilecoyote
    Inscrit en
    Novembre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 154
    Points : 149
    Points
    149
    Par défaut
    Ok merci pour votre aide je vais essayer tous ça

  12. #12
    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
    Au niveau ETL ce qu'on essaye de faire c'est de grouper les inserts par paquets de n et de commiter soit tous les 5/10 n, soit de commiter à la fin de la procédure (dangereux cependant).
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

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

Discussions similaires

  1. [MySQL] SELECT, INSERT et UPDATE sur un très grand nombre de lignes pour faire un classement
    Par sagat06 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 01/04/2014, 18h52
  2. Insertion d'un grand nombre de Insert
    Par Keldou dans le forum SQL
    Réponses: 7
    Dernier message: 08/05/2008, 10h00
  3. [MySQL] INSERT ou UPDATE pour un grand nombre d'enregistrements
    Par Phil.Antrope dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/12/2007, 17h24
  4. [SQL] Optimisation pour un grand nombre d'insertions
    Par ddelec24 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/08/2007, 14h33
  5. Une unité pour gérer des très grands nombres
    Par M.Dlb dans le forum Langage
    Réponses: 2
    Dernier message: 09/09/2003, 12h07

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