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

PL/SQL Oracle Discussion :

Session et tablespace temp [10gR2]


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 167
    Points
    167
    Par défaut Session et tablespace temp
    Bonjour,

    Je rencontre une difficulté sur un projet que j'ai pris en main récemment.

    Le contexte

    Un ordonnanceur lance une procédure stockée A qui lance elle même une centaine de proc stock (appeler Bx par la suite). L’exécution de ces procédures est donc toujours dans la même session Oracle.

    Au bout de 3 heures de traitement, une erreur ORA-01652: unable to extend temp segment by 256 in tablespace est remontée. Logique, comme tout se passe dans la même session, l'espace temporaire n'est jamais libéré (si j'ai bien suivi...)

    La solution propre serait de faire porter l'appelle de toutes ces procédures par l'ordonnanceur , mais malheureusement ce n'est pas possible pour tout un tas de raison (cout, délai, dispo des equipes ...)


    Mon idée de contournement


    lancer les procédures Bx dans leurs propres session Oracle, ouverte et clôturer par A (je sais, c'est pas génial ...)

    Savez vous si cela est possible dans du code PL/SQL (rien vu sur google pour le moment, cas 1 je cherche mal, cas 2 : ça sent vraiment le caca ) ?

    merci d'avance pour votre aide

  2. #2
    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
    Citation Envoyé par dude666 Voir le message
    ...

    Au bout de 3 heures de traitement, une erreur ORA-01652: unable to extend temp segment by 256 in tablespace est remontée. Logique, comme tout se passe dans la même session, l'espace temporaire n'est jamais libéré (si j'ai bien suivi...)
    ...
    Ca sent le produit cartésien suite à une jointure mal faite dans une requête SQL. Tracez le traitement pour voir où ça se passe!

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 167
    Points
    167
    Par défaut
    Malheureusement non. on a tracé toutes les requetes, et aucune ne fait de produit cartésien.

    les traitements les plus consommateurs de l'espace temporaire sont des requêtes du type create table as select, et la réecriture de ces parties n'est pas prévues à court termes

  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
    Et vous avez trouver la requête qui plante ? Autre question vous est en autoextend sur le tablespace Temp et quelle est sa taille ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 167
    Points
    167
    Par défaut
    oui, la requête qui plante est une toute petite requete (<1000 lignes) avec un utilisation du temp < 1Mo.
    Le problème est que ses petites copines appelées avant elle ont bouffé tout le tablespace temp.

    Sur les TBS temp, on est en autoextent, avec deux datafiles de 10 go (donc 20 en tout ...)

  6. #6
    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
    A ma compréhension: l'exécution d'une requête a besoin d'espace temporaire pour une raison ou autre; par conséquence au fur et mesure de son exécution elle en prends. Mais une fois fini l'exécution de la requête en question l'espace est libéré. Donc l'espace ne reste pas alloué en attendant la fin de la transaction.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 167
    Points
    167
    Par défaut
    Apparemment, dixit nos DBA, l'espace temporaire utilisé par les requêtes est libéré après la clôture de la session oracle. ce qui explique l'augmentation sans fin de l'espace temporaire utilisé sur notre traitement batch de 8 heures.

    Nous avons contourné le problème :
    Le programme actuel créer un grand nombre de table avec la commande create table as select. Or, ce que je ne savais pas mais qui est enfin de compte assez logique, c'est que ce type de commande utilise l'espace temporaire pour stocker le résultat de la requête avant la création de la table, d’où une surconsommation même si les requêtes sont performantes.

    On a donc juste remplacé ces create table as select par des insert into simple et ca marche beaucoup mieux (et c'est plus propre !)

    Merci pour votre aide, je passe le post à résolu.

  8. #8
    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
    Citation Envoyé par dude666 Voir le message
    Apparemment, dixit nos DBA, l'espace temporaire utilisé par les requêtes est libéré après la clôture de la session oracle. ce qui explique l'augmentation sans fin de l'espace temporaire utilisé sur notre traitement batch de 8 heures.
    ....
    Envoyer votre DBA faire une formation.
    Oracle Concepts
    Oracle Database allocates temporary segments for queries as needed during a user session and drops them when the query completes.

  9. #9
    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
    Citation Envoyé par dude666 Voir le message
    ...
    Le programme actuel créer un grand nombre de table avec la commande create table as select. Or, ce que je ne savais pas mais qui est enfin de compte assez logique, c'est que ce type de commande utilise l'espace temporaire pour stocker le résultat de la requête avant la création de la table, d’où une surconsommation même si les requêtes sont performantes.
    ...
    Donc vous pensez que n'importe quelle instruction de type create table as select "utilise de l'espace temporaire pour stocker le résultat de la requête avant la création de la table..."
    Eh bon si vous allez investiguer un peu vous allez finir par vous rendre compte que c'est faux en dépit d'avoir un air "assez logique".

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

Discussions similaires

  1. tablespace TEMP enorme 33 Go et plein a 100%
    Par tibal dans le forum Administration
    Réponses: 31
    Dernier message: 25/10/2006, 09h19
  2. Tracer plusieurs sessions en même temps
    Par alex75 dans le forum Oracle
    Réponses: 15
    Dernier message: 19/04/2006, 15h25
  3. tablespace temp full
    Par otaquet dans le forum Oracle
    Réponses: 4
    Dernier message: 20/12/2005, 06h19
  4. Tablespace TEMP : croissance éxagérée
    Par vanderbes dans le forum Oracle
    Réponses: 5
    Dernier message: 10/12/2005, 09h36
  5. [9i] Utilisation du tablespace TEMP
    Par Fabien Celaia dans le forum Oracle
    Réponses: 3
    Dernier message: 14/02/2005, 18h32

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