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 :

[8i] Performance import


Sujet :

Oracle

  1. #1
    Membre actif
    Inscrit en
    Décembre 2002
    Messages
    438
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 438
    Points : 218
    Points
    218
    Par défaut [8i] Performance import
    Bonjour,

    Dans le cadre du rafraichissement d'une base de données d'étude, nous exportons la base de prod. pour la reimporter en base de développement.

    La base de production fait 100 Go mais contient beaucoup de vide puisque l'export fait 7 Go.

    Pour ne pas reimporter le vide en base de developpement (serveur d'étude un peu plus petit !), nous avons recréé les tables et indexes en les dimensionnants à la juste taille. Au final, la base fait 14 Go.

    le script de rafraichissement fait :
    -disable fk
    -disable trigger
    -truncate table
    -drop procedure function et package
    -drop sequence
    -drop vue
    - import
    -enable_fk
    -enable_trg

    La ligne de commande de l'import est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imp userid=xxx buffer=51200000 fromuser=yyy touser=zzz grants=N show=N ignore=Y commit=Y indexes=Y full=N file=ttt.dmp
    La ligne de commande de l'export est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exp userid=xxx buffer=3072000 compress=Y grants=Y indexes=Y rows=Y FULL=Y file=ttt.dmp

    L'import tourne 20 heure !

    Que puis-je faire pour optimiser le temps ?

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    et en re créant les index à part

    est ce que tu observe des évènements d'attente particulier lors de l'insert ?

  3. #3
    Membre actif
    Inscrit en
    Décembre 2002
    Messages
    438
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 438
    Points : 218
    Points
    218
    Par défaut
    tu veux dire faire un imp avec indexes=N puis un imp avec indexes=Y et rows=N ?

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    A noter que COMMIT=YES signifie : faire un commit après l'insertion de chaque ligne !!!
    Ce n'est pas très économique.

    A moins que vos tables soient énormes, il est préférable de choisir COMMIT=NO. Dans ce cas, la validation aura lieu à la fin du chargement de chaque table. Il faut donc prévoir des segments d'annulation suffisamment bien taillés pour supporter la table la plus grosse.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  5. #5
    Membre actif
    Inscrit en
    Décembre 2002
    Messages
    438
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 438
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par Pomalaix
    A noter que COMMIT=YES signifie : faire un commit après l'insertion de chaque ligne !!!
    Ce n'est pas très économique.

    A moins que vos tables soient énormes, il est préférable de choisir COMMIT=NO. Dans ce cas, la validation aura lieu à la fin du chargement de chaque table. Il faut donc prévoir des segments d'annulation suffisamment bien taillés pour supporter la table la plus grosse.
    Non il fait un commit après chaque insertion de buffer (paramètre buffer).

    J'ai des très grandes tables (8 à 9 millions d'enregistrements, 2 Go)

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par PhPeltier
    Non il fait un commit après chaque insertion de buffer (paramètre buffer).
    Bien vu, pan sur le bec !

    Cependant néanmoins, en me replongeant à l'instant dans la doc, je lis :
    A la rubrique ARRAY : For tables containing LONG, LOB, BFILE, REF, ROWID, UROWID, or DATE columns, rows are inserted individually
    A la rubrique COMMIT : For tables containing LONG, LOB, BFILE, REF, ROWID, UROWID, or DATE columns, array inserts are not done. If COMMIT=y, Import commits these tables after each row.

    Des tables qui contiennent des dates, c'est fréquent, et celles-ci seront donc validées ligne par ligne... Affolant cette affaire !
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  7. #7
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Et des tables qui ne contiennent pas de rowid, c'est quoi donc ??? comment est-ce possible ?

  8. #8
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Et sinon, est-ce que la lenteur ne proviendrait pas des disques très sollicités ?

    Je ferais le test suivant :
    • Base en no logging
    • Pas d'import des indexes
    • répartition de la charge disque sur plusieurs disques (ne pas avoir le fichier dmp lu en import sur le même disque que le fichier de data, typiquement)
    • Ajout de DBWriters si wait d'écritures
    • Si attentes de types free buffer wait, augmentation du buffer

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/08/2009, 15h14
  2. [Performance]Recuperer une liste important de données
    Par Shivan dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/02/2009, 20h57
  3. [XSL-FO] Important : Cherche WYSIWYG performant pour XSL-FO
    Par forden dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/03/2006, 22h25
  4. Réponses: 9
    Dernier message: 31/01/2006, 22h42
  5. JDBC + import + performance
    Par bfb dans le forum JDBC
    Réponses: 9
    Dernier message: 20/12/2005, 16h33

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