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 :

Ne pas utiliser les tables temporaires sous Oracle? [11gR2]


Sujet :

Administration Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut Ne pas utiliser les tables temporaires sous Oracle?
    Hello le forum!

    Nous avons une table qui est vide puis remplie par un Insert As Select avant d'être entièrement vidée par un delete une fois les traitements effectués. Selon les tests des users, le delete prends trop de temps (quelques minutes sans que j'aie la volumétrie de la table). Une solution rapide a été de faire un Truncate, ce qui a parait-il grandement amélioré la situation MAIS de façon temporaire : le problème est revenu.

    Nous cherchons une solution définitive et j'ai proposé d'utiliser une table temporaire pour faire l'insert, sans le delete car Oracle fait un Truncate sur la table temporaire à la fin de la session.

    Un autre DBA déconseille TRES fortement l'utilisation des tables temporaires sous prétexte qu'Oracle les gérerait très mal mais sans avancer de preuves

    Pouvez-vous me dire si effectivement les tables temporaires sont à éviter ou bien si c'était vrai par le passé et plus aujourd'hui?

    Par avance merci pour vos conseils.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Personne n'a d'idée
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    J'avais commencé à répondre, sans aller au bout.

    Je ne vois aucune raison de ne pas utiliser de table temporaire pour ton cas (sauf peut être une volumétrie excessive).
    Le truc à savoir c'est que les GTT vont dans le TEMP (donc tu peux le remplir s'il est trop petit)

    Petit lien récap des GTT https://oracle-base.com/articles/misc/temporary-tables

    Pour les problèmes de perf, il aurait fallu voir l'évolution de la volumétrie de la table, ainsi que du nombre d'Insert/delete appliqués.

    J'utilise assez souvent des GTT sans jamais avoir eu de souci.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  4. #4
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Le seul argument contre l'utilisation des tables temporaires est que souvent elle ne servent à rien sauf à alourdir le traitement en question. Mais comme cela fait partie des mauvaise habitudes des programmation les plus répandues...
    Demandez à DBA en question pourquoi ou en quoi Oracle gère mal ce type de tables. Si il n'a pas des arguments cela dit clairement qu'il n'as pas compris de quoi il parle!
    Ce type de table est apparue dans Oracle spécialement pour répondre aux problèmes que vous signalez!

  5. #5
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Merci beaucoup les gars, vous êtes une fois de plus d'excellent conseil.

    L'autre DBA ne m'a pas donné d'arguments mais comme il est plus expérimenté que moi je n'ai pas voulu mettre en doute publiquement ses propos.

    En tout cas je suis rassuré car en allant sur le Net j'avais bien identifié cet objet comme une solution à nos problèmes.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  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
    Il y a un critère pratique à prendre en compte avant même de se préoccuper des performances : les données stockées dans cette table temporaire ont-elles besoin d'être accédées par plusieurs sessions ? Si oui, on abandonne, vu que les données dans une telle table sont propres à la session, et ne peuvent pas être partagées.

    Côté performances, les tables temporaires sont censées être gagnantes notamment grâce au fait qu'elles génèrent considérablement moins de journalisation REDO que les tables ordinaires.
    On leur reproche parfois des "problèmes" de statistiques, mais à vrai dire de ce point de vue elles ne se distinguent pas d'une table ordinaire qu'on viendrait de créer et d'alimenter.
    On peut alors ne pas calculer les statistiques et laisser l'échantillonnage dynamique opérer, ou bien calculer les statistiques normalement (GATHER_TABLE_STATS), ou encore introduire des statistiques en dur (SET_TABLE_STATS), et pourquoi pas les verrouiller (LOCK_TABLE_STATS).
    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
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    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 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Citation Envoyé par Ikebukuro Voir le message
    L'autre DBA ne m'a pas donné d'arguments mais comme il est plus expérimenté que moi je n'ai pas voulu mettre en doute publiquement ses propos.
    ... tu as bien fait. Balancer un 'oracle le gère mal' sans préciser le contexte, la version et la raison suffit à mettre en doute ces propos

    Sur des domaines qui évoluent si vite comme l'IT c'est les gens qui se posent des questions qui sont les plus expérimentés, pas ceux qui se basent sur des idées préconçues. Donc tu es du bon côté.

    Du moment que les données n'ont pas à être persistées au delà de la session, et n'ont pas à être vues par les autres session, les GTT sont la bonne réponse. Si tu est en 12c tu peux mettre temp_undo_enabled=true;

    Seul inconvénient des GTT: si un traitement plante au milieu tu ne pourras pas voir dans quel état étaient les donnés, ce qui aurait pu aider au débogage.

    Mais je suis quand même étonné du côté temporaire de l'amélioration avec truncate. Le truncate est immédiat, non?
    Une première chose à faire c'est TRUNCATE au lieu de delete et INSERT /*+ append */ au lieu d'insert conventionnels. Ensuite, passer aux GTT avec ça.


    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/07/2014, 16h56
  2. [débutant] Ne pas utiliser les frames ?
    Par Pigoulou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/02/2006, 10h09
  3. c koi l'interet d'utiliser les tables Myisam
    Par emchakes dans le forum Débuter
    Réponses: 4
    Dernier message: 02/12/2005, 19h08
  4. MS SQL SERVER et les tables temporaires
    Par beb_has_return dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/02/2005, 14h36

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