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

Administration Oracle Discussion :

Optimisation pour traitement type data warehouse


Sujet :

Administration Oracle

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Points : 172
    Points
    172
    Par défaut Optimisation pour traitement type data warehouse
    Bonjour à tous,

    Je cherche à optimiser mon traitement hebdomadaire qui traite de très gros volumes de datas. En gros, il se déroule de la manière suivante :
    1. Récupération des données depuis une réplication d'un environnement de production ;
    2. Création de nos tables de work (nos tables sur lesquelles s'appuient mon traitement) ;
    3. Traitement ;

    Mon but serait d'optimiser au maximum les tables lors de l'étape 2, afin de gagner du temps dans l'étape 3.

    Les tables créées lors de cette étape seront lues lors de l'étape 3, mais aucune n'est amenée à être modifiée (aucun DELETE / INSERT / UPDATE).

    Je pensais faire la chose suivante lorsque je crée mes tables :

    - mettre PCT free à 0 : permet de gagner en espace disque et de gagner un peu en perf ;
    - mettre en nocompress : pour ne pas perdre en perf lors de la décompression, et pas besoin spécialement de gagner en espace disque ;
    - mettre en nologging : pas besoin de conserver de traces spéciales ;
    - (mettre les tables en read-only à la fin des insertions ?) : peut éventuellement permettre de gagner en perf ;

    Lors des insertions, actuellement nous avons paralléliser les INSERT avec un HINT, mais j'ai lu qu'il pourrait être préférable de laisser sans parallélisme afin d'avoir des fichiers propres.

    N'étant pas spécialiste oracle, j'aurais aimé avoir des avis sur les différents points ci-dessus, et savoir si ces affirmations sont plutôt justes ou non, et également qu'est ce que je peux mettre d'autre en place pour améliorer mes performances et optimiser mes tables.

    Les plus volumineuses sont également partitionnées + sous partitionnées, on crée également les index et ont fait les stats à 20% à la fin de chaque création de table.

    Si je prend la configuration d'une table actuellement sur notre environnement, ca ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SEGMENT CREATION IMMEDIATE 
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
     NOCOMPRESS LOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "XXX"
    Voila, merci d'avance pour toutes vos remarques !

    Bonne journée

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Citation Envoyé par Bouga74 Voir le message
    - mettre PCT free à 0 : permet de gagner en espace disque et de gagner un peu en perf ;
    Oui !

    Citation Envoyé par Bouga74 Voir le message
    - mettre en nocompress : pour ne pas perdre en perf lors de la décompression, et pas besoin spécialement de gagner en espace disque ;
    Ça dépend. La compression troque du CPU contre des I/O.
    Si vous avez du CPU disponible mais peu d'I/O (c'est souvent le cas), la compression a du sens.

    Citation Envoyé par Bouga74 Voir le message
    - mettre en nologging : pas besoin de conserver de traces spéciales
    Oui !

    Citation Envoyé par Bouga74 Voir le message
    - (mettre les tables en read-only à la fin des insertions ?) : peut éventuellement permettre de gagner en perf ;
    Je ne pense pas que ça change les performances, mais c'est quelque chose que je n'ai pas testé.

    Citation Envoyé par Bouga74 Voir le message
    Lors des insertions, actuellement nous avons paralléliser les INSERT avec un HINT, mais j'ai lu qu'il pourrait être préférable de laisser sans parallélisme afin d'avoir des fichiers propres.
    Vous pouvez laisser le parallélisme, mais surtout faire vos insert avec le hint APPEND.

    Citation Envoyé par Bouga74 Voir le message
    Les plus volumineuses sont également partitionnées + sous partitionnées, on crée également les index et ont fait les stats à 20% à la fin de chaque création de table.
    Le partitionnement a un coût à l'intégration mais peut offrir grandement en restitution. Vérifier que vos critères de partitions et sous-partitions sont bien utilisés systématiquement ou quasi-systématiquement dans la suite des traitements.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Points : 172
    Points
    172
    Par défaut
    Super, merci beaucoup pour la réponse détaillée !

    Bon déjà ca me rassure, je ne pars pas totalement dans le mauvais sens.

    Ça dépend. La compression troque du CPU contre des I/O.
    Si vous avez du CPU disponible mais peu d'I/O (c'est souvent le cas), la compression a du sens.
    Effectivement, on a pas mal de CPU a dispo et les I/O peuvent être un plus gros problème, je vais surement reconsidérer la compression alors ! Je pensais que cela péjorerais les perf, juste pour nous faire gagner de l'espace disque (qui pour le moment nous convient) ;

    Je ne pense pas que ça change les performances, mais c'est quelque chose que je n'ai pas testé.
    J'ai lu ça quelque part, je n'ai pas testé et je l'ai juste gardé en coin de tête au cas ou, je testerai à l'occase.

    Vous pouvez laisser le parallélisme, mais surtout faire vos insert avec le hint APPEND.
    En mettant le HINT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /*+PARALLEL (matable, 4)*/
    ,
    je dois également rajouter le APPEND ou il y est d'office ?

    Le partitionnement a un coût à l'intégration mais peut offrir grandement en restitution. Vérifier que vos critères de partitions et sous-partitions sont bien utilisés systématiquement ou quasi-systématiquement dans la suite des traitements.
    Nous traitons sur 3ans en général, et les datas sont assez bien réparties donc ca devrait aller.



    Encore merci pour toutes ces précisions !

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Pour le hint, il faut l'ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /*+ APPEND PARALLEL (matable, 4)*/
    À noter qu'en fonction de la version d'Oracle, ce hint doit être placé au niveau de l'insert.

    Dans le plan d'exécution vous verrez apparaître LOAD AS SELECT.

    Il y a toutefois quelques restrictions : il ne faut pas de contraintes référentielles sur votre table, ni de déclencheurs et jusqu'à validation ou annulation de la transaction, la table est inutilisable.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Points : 172
    Points
    172
    Par défaut
    Ok parfait merci bien, je vais tester tout ça !

  6. #6
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Points : 6 446
    Points
    6 446
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Tout ça m'a l'air tout bon. Juste quelques remarques:

    nologging et pctfree=0 c'est très bien

    compress: sur ce type de traitement le fait de faire beaucoup moins d'i/o compense largement le surplus de CPU.

    read only: pas d'impact

    stats à 20%: en 11g auto_sample_size est recommandé (stats plus pertinentes en moins de temps)

    parallel: attention, pour faire du parallel DML, il faut l'activer au niveau de la session:
    ALTER SESSION ENABLE PARALLEL DML;
    ici comment vérifier dans le plan d'exécution.

    Cordialement,
    Franck.

  7. #7
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Franck

    stats à 20%: en 11g auto_sample_size est recommandé (stats plus pertinentes en moins de temps)
    A condition qu'il soit en approximate_ndv. Pour vérifier il fait ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DBMS_STATS.get_prefs('approximate_ndv') FROM dual;
    Bouga74,

    Comme ça, en naviguant dans le noir, je dirai que si vous pouvez opter pour des tables temporaires (Global temporary Table) l'insertion ira certainement plus vite que dans des tables ordinaires (heap table).

    Si vous avez des traces d'un traitement batch, on pourrait peut être vous dire d'avantage

  8. #8
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Hello,

    Je dirai aussi pas de stats sur les tables de l'étape 2 mais du dynamic sampling.
    J'ai parfois eu de bien mauvaises surprises avec une logique similaire.

    Jko

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Points : 172
    Points
    172
    Par défaut
    Merci pour vos retours !

    Citation Envoyé par pachot
    compress: sur ce type de traitement le fait de faire beaucoup moins d'i/o compense largement le surplus de CPU.

    read only: pas d'impact

    stats à 20%: en 11g auto_sample_size est recommandé (stats plus pertinentes en moins de temps)

    parallel: attention, pour faire du parallel DML, il faut l'activer au niveau de la session:
    Citation:
    ALTER SESSION ENABLE PARALLEL DML;
    ici comment vérifier dans le plan d'exécution.
    - Effectivement, suite au message de Waldar, j'ai reconsidéré la chose et activé le mode basic de compression.

    - Nous allons passer en 11g d'ici le début d'année, actuellement nous somme toujours en 10, mais je garde cela de côté pour dans quelques semaines !

    - J'avais effectivement mis le ALTER SESSION, quand je regarde mes sessions actives lorsque le traitement tourne j'ai bien mes 4 exécutions en parallèles.

    Citation Envoyé par Mohamed.Houri
    Comme ça, en naviguant dans le noir, je dirai que si vous pouvez opter pour des tables temporaires (Global temporary Table) l'insertion ira certainement plus vite que dans des tables ordinaires (heap table).

    Si vous avez des traces d'un traitement batch, on pourrait peut être vous dire d'avantage
    - Je pensais le faire pour des tables créée à l'intérieure du traitement, je ferais le test pour voir tout cela !

    - Sinon je n'ai malheureusement pas beaucoup de droit sur ma base, je voulais activer les traces mais pas moyens de récupérer les fichiers sur le serveur de la base...

    Citation Envoyé par jkofr
    Je dirai aussi pas de stats sur les tables de l'étape 2 mais du dynamic sampling.
    - Je regarde également ça, je ne connais pas tellement !

    Merci à tous les 3 !

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Points : 172
    Points
    172
    Par défaut
    Une dernière question, lorsque (dans l'étape 1) on récupère les données de l'environnement répliqué de la production et qu'on les ramène sur notre propre environnement, on crée des vues matérialisés.

    Ces vues sont en nocache, nologging, nocompress, et parallel(degree 4 instances default).

    Est-ce que ca vaut également le coup de les compresser ?

    Exemple de création d'une de nos vues :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create materialized view user.abcd tablespace u1 storage (buffer_pool default  flash_cache default  cell_flash_cache default)
    nocache
    nologging
    nocompress
    parallel ( degree 4 instances default )
    build immediate
    never refresh
    as select * from user.abcd@RPQLPROD where rownum > 0;

  11. #11
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Points : 6 446
    Points
    6 446
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bouga74 Voir le message
    Ces vues sont en nocache, nologging, nocompress, et parallel(degree 4 instances default).
    Oui probablement, pour diminuer les i/o.

  12. #12
    Membre habitué
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Points : 172
    Points
    172
    Par défaut
    Ok parfait merci !

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

Discussions similaires

  1. Optimisation d'un Data Warehouse
    Par saidna123 dans le forum Administration
    Réponses: 5
    Dernier message: 16/04/2009, 01h24
  2. SGBD pour un data warehouse
    Par Jester dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 16/03/2009, 13h09
  3. Type d'implementation d'un Data Warehouse
    Par Pedro Varela dans le forum Conception/Modélisation
    Réponses: 7
    Dernier message: 17/11/2008, 14h16
  4. Mysql comme data warehouse pour le décisionnel
    Par Jester dans le forum Autres outils décisionnels
    Réponses: 1
    Dernier message: 15/04/2008, 15h24

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