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 :

Statistiques des indexs sur tables temporaires


Sujet :

Administration Oracle

  1. #1
    Membre du Club Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 58
    Points
    58
    Par défaut Statistiques des indexs sur tables temporaires
    Bonjour,

    Je suis en train de réécrire un traitement et je me pose des questions auxquelles je ne trouve pas de réponse. La problématique est la suivante :

    - J'ai un vieux traitement qui utilise des tables de travail, sous la forme de tables "normales" qu'il drop à chaque début de traitement et recrée à l'aide d'insert..select. Ce traitement ajoute des indexes sur ces tables et calcule des stats à l'aide d'analyze. A la fin il fait un spool d'une requête basée sur ces tables de travail.
    - J'ai remarqué qu'en dehors de ce traitement, les tables en question ne sont utilisées nulle part, j'ai décider de remplacer ces tables par des global temporary table. J'ai par contre conservé les indexes.

    Mes questions sont les suivantes : Est ce que mes indexes vont être utilisés quand ce sera judicieux? Est ce qu'il faut que je conserve mes calculs de stats dans le traitement, car j'ai cru comprendre que les stats sont calculées automatiquement quand elles sont manquantes. En fait je vois mal comment oracle se débrouille pour les stats sur les tables temporaires, vu que logiquement chaque session voit ses propres données mais pas les autres.

    merci de votre aide.

    Edit: j'ai oublié de préciser, je suis sur 10g

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Quelques éléments de réponse dans la section "Query Plans with Temporary Tables" de l'article http://www.oracle.com/technology/ora...o54asktom.html qui concerne 9.2 et 10.1.

    En résumé: Oracle calcule les statistiques avec du dynamic sampling càd qui est exécuté à la volée lors de la compilation de la requête. Mais vous pouvez également utiliser DBMS_STATS pour les coder en dur si nécessaire.

  3. #3
    Membre du Club Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Merci pifor çà répond tout à fait à ma question.

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    Le calcul des stats semble agir sur l'optimiseur pour des tables temporaires.

    En 10.2.4, en testant l'option DELETE ROWS, le lancement de l'analyse produit un commit et donc vide la table, ce qui n'est pas le but recherché.

    Un test fait avec l'option PRESERVE ROWS permet d'utiliser (ou non) l'index.
    - Sans stats, le mode rule est utilisé, ou bien du dynamic sampling si jointure avec une table non temporaire.
    - Avec stats, j'obtiens dans les 2 cas des plans sans dynamic sampling.

    Donc logiquement l'analyse permet d'orienter le plan d'exécution même sur une global temporary table.
    Cependant en cherchant à optimiser dans ce sens, tu prends le risque de changer un plan et un mécanisme peut-être déjà prévu pour une table non temporaire.
    Es tu sûr qu'il n'y a vraiment pas des traitements annexes qui se basent sur cette table (monitoring, audit fonctionnel, etc) ?
    En cas de plantage ou d'arrêt du traitement utilisant cette table, la perte les données insérées peut aussi poser pour l'analyse du problème et l'éventuelle reprise du traitement.
    De plus, je crois que les options de flashback ne sont pas possible pour ce type de tables.

    edit: le temps de faire le test, pifor a apporté une réponse donumentée.

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

Discussions similaires

  1. Utilisation des index sur tables à jeux de caractères différents
    Par globule71 dans le forum Administration
    Réponses: 0
    Dernier message: 11/07/2008, 10h28
  2. Obtenir des informations sur table temporaire
    Par davidou2001 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/06/2007, 16h36
  3. Réponses: 4
    Dernier message: 23/09/2005, 09h16
  4. Réponses: 15
    Dernier message: 16/08/2005, 14h43
  5. [Sybase] Utilisation indexes sur table Proxy
    Par MashiMaro dans le forum Sybase
    Réponses: 2
    Dernier message: 20/02/2004, 10h20

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