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

SQL Oracle Discussion :

SYS_B_x, cache et optimisation requete


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Par défaut SYS_B_x, cache et optimisation requete
    bonjour à tous,

    je viens vers vous pour une simple question car je débute dans oracle admin et on me demande d'optimiser une requête.

    en fait j'ai une requete qui répond en 3min sous 8i et en 13min sous 10g
    et on me demande de trouver ce qui ne va pas.

    le truc c'est que j'y connais pas grand chose.

    On me demande alors :
    -comment désactiver le cache pour eviter que la requete sous 10g tape dans le cache
    - on ma fourni la requete et je vois des cause dans le where =:"SYS_B_0", =:"SYS_B_1" et =:"SYS_B_3" mais je ne sais pas a quoi correspond ces sys_b_x
    quelqu un pourrait m'expliquer svp


    Merci de votre aide

  2. #2
    Expert confirmé 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
    Par défaut
    Les :SYS_B_0 vient de la valeur du paramètre CURSOR SHARING. La valeur par défaut est EXACT mais soit au niveau de la base soit au niveau de la session vous avez une autre valeur (FORCE ou SIMILAR).
    L’idée a été de forcer l’utilisation des variables de liaison (binding variables) pour une application qui ne les utilise pas. C’est-à-dire que les requêtes sont de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select * from emp where empno = 7139
    Et non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select * from emp where empno = :b1
    Les requêtes qui n’utilisent pas de variable de liaison posent des problèmes de parsing. Les requêtes qui n’utilisent que des variables de liaison peuvent poser des problèmes dans l’estimation des cardinalités par l’optimiseur. Et mauvais cardinalités égal mauvais plan d’exécution et donc mauvais temps de réponse.
    Lisez cet article aussi.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Par défaut
    Merci pour ta réponse mnitu

    il y'a encore beaucoup de notion que je ne maitrise pas mais tu m'a déjà mis sur une bonne voie avec tes explications.

    je vais voir encore un peu le problème pour voir ce qu il veulent faire

    good

    A+

  4. #4
    Membre émérite Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Par défaut
    Citation Envoyé par elkamaro Voir le message
    ...on me demande de trouver ce qui ne va pas.

    On me demande alors :
    -comment désactiver le cache pour eviter que la requete sous 10g tape dans le cache
    - on ma fourni la requete et je vois des cause dans le where =:"SYS_B_0", =:"SYS_B_1" et =:"SYS_B_3" mais je ne sais pas a quoi correspond ces sys_b_x
    quelqu un pourrait m'expliquer svp
    Bonjour à toi,
    Le cache des données ne se désactive pas. Néanmoins tu peux le vider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter system flush buffer_cache;
    pour le cache des données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter system flush shared_pool;
    pour le cache du dictionnaire et des requêtes (plan d'exécution)

    Pour ta requête qui pose problème :
    - déterminer son plan d'exécution (le réel, pas le théorique) : sous sqlplus, un simple SET AUTOTRACE TRACEONLY suffira avant de lancer la requête. Tu obtiendras le plan réel et quelques statistiques (nb de buffers lus, nb d'accès disque...)
    - vérifier la présence de statistiques sur les objets de la requête (tables et index)
    - comparer le plan en 8i par rapport à celui de la 10g (compare aussi le volume des datas concernées, les éventuelles statistiques sur les tables/index de la 8i et la valeur du paramètre optimizer_mode)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Par défaut
    Citation Envoyé par 13thFloor Voir le message
    Bonjour à toi,
    Le cache des données ne se désactive pas. Néanmoins tu peux le vider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter system flush buffer_cache;
    pour le cache des données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter system flush shared_pool;
    pour le cache du dictionnaire et des requêtes (plan d'exécution)

    Pour ta requête qui pose problème :
    - déterminer son plan d'exécution (le réel, pas le théorique) : sous sqlplus, un simple SET AUTOTRACE TRACEONLY suffira avant de lancer la requête. Tu obtiendras le plan réel et quelques statistiques (nb de buffers lus, nb d'accès disque...)
    - vérifier la présence de statistiques sur les objets de la requête (tables et index)
    - comparer le plan en 8i par rapport à celui de la 10g (compare aussi le volume des datas concernées, les éventuelles statistiques sur les tables/index de la 8i et la valeur du paramètre optimizer_mode)

    Salut,
    cool merci pour tes explication et en plus tu me donne un plan pour faire mon analyse (je rappel que je suis pas du tout un dba mais on ma mis dans une mision en tant que tel)

    je vais essayer de recuperer les plan d'ecution et les requete et vous tient au courant
    mais le problème c est que la personne essaye de faire une migration de la 8i vers la 10g et je crois que je n'ai pas accés à ses bases

    on verra

    ça fait lontemps que je suis pas venu sur ce forum mais les gens sont toujours aussi accueillant merci à vous

Discussions similaires

  1. Optimisation requete
    Par mic79 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/04/2005, 16h35
  2. optimisation requetes (besoin de votre avis)
    Par seb92 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/12/2004, 11h27
  3. [PL/SQL] Optimisation requete SQL
    Par CDRIK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/10/2004, 09h52
  4. [SYBASE] optimisation requete UPDATE
    Par metheorn dans le forum Sybase
    Réponses: 8
    Dernier message: 24/05/2004, 17h01
  5. Optimisation requetes SQL
    Par joel90 dans le forum Administration
    Réponses: 18
    Dernier message: 15/05/2004, 21h45

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