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 :

Problème de performances suite au passage de Oracle 10R2 à Oracle 11R2


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut Problème de performances suite au passage de Oracle 10R2 à Oracle 11R2
    Bonjour,

    J'ai une requête (qui était déjà pas bien rapide) qui est devenue totalement inutilisable.

    J'ai identifié quelle partie coince :

    Tables impliquées :
    EVE
    => INDEX UNIQUE sur (CODSOC, ACHVTE, TYPEVE, NUMEVE)

    EVL
    => INDEX UNIQUE sur (CODSOC, ACHVTE, TYPEVE, NUMEVE, NUMPOS, NUMLIG)

    PRO
    => INDEX UNIQUE SUR (CODSOC, CODPRO)

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select *
    from eve
    inner join evl on evl.codsoc = eve.codsoc and evl.achvte = eve.achvte and evl.typeve = eve.typeve and evl.numeve = eve.numeve
    inner join pro on pro.codsoc = 1 and pro.codpro = evl.codpro
    where eve.codsoc = 8001
    and eve.achvte = 'A'
    and eve.typeve = 'PLA'

    Sur le serveur de DEV, cette requête fait un RANGE SCAN sur les index uniques de EVE et EVL, et un UNIQUE SCAN sur PRO, pour un coût de 167. La requête est instantanée (moins de 0,1 seconde)

    Sur le serveur de REC, cette requête fait un RANGE SCAN sur les index uniques de EVE et EVL, mais un FAST FULL SCAN sur PRO, pour un coût de plus de 90000. J'ai stoppé la requête au bout de 5 minutes.

    Les index sont les mêmes sur les deux serveurs, même version (c'est deux instance sur un même serveur).

    La volumétrie est cependant passablement différente :

    DEV :
    - EVE : 30 383
    - EVL : 67 970
    - PRO : 136 419

    REC :
    - EVE : 25 015 883
    - EVL : 84 233 838
    - PRO : 428 292

    Ok, des rapports de 1 pour 1000, c'est loin d'être anodin.
    Mais pourquoi passer d'un UNIQUE SCAN à un FAST FULL SCAN ?
    Si j'enlève la jointure sur PRO, la requête est immédiate. La requête retourne alors moins de 50 lignes. Comment 50 lectures sur PRO, en se basant sur un INDEX UNIQUE peuvent être aussi lentes ?

  2. #2
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Soit la requête est fausse (codsoc =1 et codsoc=8001), soit elle fait un produit cartesien avec PRO, dans ce cas, vu la volumétrie de la table, les temps de réponses ne m'étonnent pas.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    Combien y a -t- il de valeurs distinctes pour vos colonnes index sur la table PRO, si très peu, votre index n'est pas éligible

  4. #4
    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
    Se qui evp dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    and pro.codpro = evp.codpro
    Postez la bonne requête ainsi que les informations du plan d'exécution réel si possible sinon on perte notre temps.

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Excusez-moi, c'est pas EVL, mais EVL qu'il faut lire dans la jointure de PRO.

    Le modèle des données ne contient pas de PK ni de clé étrangères.

    Et la colonne "CODSOC" permet d'avoir un niveau de gestion (société) différent d'une entité à l'autre (table).

    Ici, les produit (PRO) sont gérés dans la société 1 (groupe), et les événements (EVE, EVP, EVL, EVT) sont gérés en société juridique (8001 dans l'exemple).

    J'ai simplifié le code en mettant ces valeurs en dur. Il y a une table MEV qui permet de faire la jointure "proprement" (autant faire se peut). Mais qu'elle soit présente ou non, ne change rien.

    Quant à la question sur l'éligibilité de l'index sur PRO, je comprends pas la question : les index que j'ai indiqué sont des index UNIQUES, donc il y a 428 292 lignes dans la table PRO, et 428 292 valeurs uniques dans l'index (même si presque toutes les lignes ont le même CODSOC).

    Sinon, les performances n'ont rien de normal, avant passage à Oracle 11, c'était la même base, un serveur vieillissant moindrement configuré, et on n'avait pas du tout de problème avec cette table. Je le répète, historiquement, ce type de jointure ne change pas un millième de seconde en temps normal.

    Il n'y a qu'une seule ligne PRO par EVL, donc avec la jointure sans PRO, on a 50 lignes, c'est pas comme si on ramenait des millions de lignes.

    EVE : Commandes
    EVL : Ligne de cadencement de la commande (un produit/un dépot de livraison/une date de livraison/un lot/un emplacement)
    PRO : Produit

    On a donc N cadencements pour une commande. Mais 1 produit pour un cadencement.

    Les index uniques que j'ai indiqué sont l'équivalent des clés primaires (qui n'existent pas dans la base). Donc vu la nature des jointures, il ne peut pas y avoir de meilleur candidat.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Quant à la question sur l'éligibilité de l'index sur PRO, je comprends pas la question : les index que j'ai indiqué sont des index UNIQUES, donc il y a 428 292 lignes dans la table PRO, et 428 292 valeurs uniques dans l'index (même si presque toutes les lignes ont le même CODSOC).
    OK en ce cas on oublie la question

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/02/2015, 09h07
  2. [11gR2] Problème de performance suite migration Oracle 9i vers Oracle 11g
    Par fifi44680 dans le forum Administration
    Réponses: 8
    Dernier message: 24/05/2014, 00h00
  3. Problème de performance suite à un delete
    Par Invité dans le forum Administration
    Réponses: 9
    Dernier message: 05/01/2012, 09h29
  4. Problèmes de performances sur une base oracle 10g
    Par ORAMEL dans le forum Oracle
    Réponses: 3
    Dernier message: 11/09/2007, 09h11
  5. [oracle 9i][Workbench]Problème de performance
    Par nuke_y dans le forum Oracle
    Réponses: 6
    Dernier message: 03/02/2005, 17h38

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