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 :

Probléme de perf sur base avec déséquilibre de volume entre les partitions


Sujet :

Administration Oracle

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Probléme de perf sur base avec déséquilibre de volume entre les partitions
    Depuis que notre base de test est utilisé par un nouveaux pays ayant un volume de données très faible (en comparaison aux pays déja présent) les performances sont catastrophique.

    Quand je fait un explain plan avec toad OEM et raptor je ne remarque rien de particulier (aucune évolution, cout raisonable...) pourtant certaines requetes tournent sans jamais s'arréter.

    Si je flush la sga ca semble améliorer la situation mais au bout de quelques minutes les problémes reviennent.

    J'ai essayé de donner accés uniquement au nouveau pays => méme comportement.

    Nous utilisons ORACLE 10gR1 les 40 plus grosses tables sont partitionnées avec comme critére le code pays.

  2. #2
    Membre habitué
    Inscrit en
    Janvier 2009
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 162
    Points : 181
    Points
    181
    Par défaut
    Bonjour,

    Quand tu dis
    Si je flush la sga
    et que les performances semblent s'améliorer tu parles de la shared pool j'imagine ? Les variables sont-elles bindées et comment calcules-tu tes statistiques (calcul d'histogrammes?) ? Quelle est la valeur de cursor_sharing ?

  3. #3
    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
    Pour analyser un problèmes de performance sur une instance, il faudrait idéalement avoir un rapport Statspack (ou AWR si on a la licence nécessaire) et une analyse par TKPROF d'une session SQL avec la trace activée.

    Ne pas oublier non plus que dans certains cas EXPLAIN PLAN ne dit pas la vérité (d'après http://download.oracle.com/docs/cd/B...an.htm#i3305):

    19.1.4 EXPLAIN PLAN Restrictions
    Oracle does not support EXPLAIN PLAN for statements performing implicit type conversion of date bind variables. With bind variables in general, the EXPLAIN PLAN output might not represent the real execution plan.

    From the text of a SQL statement, TKPROF cannot determine the types of the bind variables. It assumes that the type is CHARACTER, and gives an error message if this is not the case. You can avoid this limitation by putting appropriate type conversions in the SQL statement

  4. #4
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Citation Envoyé par Mathias44 Voir le message
    Bonjour,

    Quand tu dis et que les performances semblent s'améliorer tu parles de la shared pool j'imagine ? Les variables sont-elles bindées et comment calcules-tu tes statistiques (calcul d'histogrammes?) ? Quelle est la valeur de cursor_sharing ?
    En 10G tu peux flusher le BUFFER_CACHE

    FLUSH BUFFER_CACHE Clause

    The FLUSH BUFFER_CACHE clause lets you clear all data from the buffer cache in the system global area (SGA).

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2009
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 162
    Points : 181
    Points
    181
    Par défaut
    C'est bien pour cela que j'imagine qu'il s'agit de la shared pool parce qu'observer une amélioration après un flush du buffer cache, personnellement je serais embêté pour trouver une explication !

  6. #6
    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,

    Le problème vient probablement du fait que tu utilise une bind variable (ou sinon que tu utilises cursor_sharing=force) pour la requête.
    L'optimiseur va choisir son plan d'exécution en fonction de la première exécution: si la valeur de la variable correspond à une petite partition ou à une grande, le plan sera différent. Lorsque tu fais un flush shared_pool, la requête sera reparsée, et fera son choix de plan d'exécution différemment.

    La solution dépends de plusieurs choses:
    - désactiver le 'bind variable peeking', c'est possible mais non supporté
    - changer les requêtes pour avoir la clé de partition en dur au lieu d'une variable
    - fixer un plan d'exécution avec les outlines
    - etudier les 2 plans d'exécution (quand c'est rapide et quand c'est long)
    - ou simplement ne pas partitionner
    ...

    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

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Je pense plutôt que c'est un problème de plan d'exécution qui reste en mémoire. En effet, on peut imaginer que les requêtes sur les petits volumes font des FTS et si le plan d'exécution est fixé il se tape des FTS même quand ce sont des gros volumes.

    Ce qui expliquerait par ailleurs qu'un flush règle le problème

Discussions similaires

  1. problème de perfs sur une base 10g
    Par cyclone_yas dans le forum Administration
    Réponses: 3
    Dernier message: 21/09/2011, 18h50
  2. Problème de filtre sur date avec ADOQuery
    Par lingli dans le forum Bases de données
    Réponses: 12
    Dernier message: 30/04/2006, 15h40
  3. [VB.NET] Problème de connexion à la base avec VB.net
    Par Bqda dans le forum Windows Forms
    Réponses: 13
    Dernier message: 02/04/2006, 13h56
  4. [phpMyAdmin] Problème de connexion sur BDD avec phpMyAdmin 2.8.0.2
    Par romca dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 21/03/2006, 14h35
  5. Réponses: 5
    Dernier message: 17/06/2004, 23h38

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