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

Oracle Discussion :

Interpréter un rapport statspack ou AWR


Sujet :

Oracle

  1. #21
    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 pachot Voir le message
    ...
    Dans ton exemple, un delete sur t_mere ou un update de id_mere, même s'ils ne touchent aucune ligne, aurait été bloqué et aurait en outre bloqué toute nouvelle modification sur la table t_fils, jusqu'à ce que la transaction initiale se termine.
    ...
    Merci de votre intervention mais, je connaît comment ça fonctionne sinon je n'aurais pas choisi ces exemples, n'est pas vrai ? Par ailleurs, les applications qui possèdent un peu de bon sens évitent de modifier la clé primaire vu qu'elle est immuable, donc ...

    En conclusion il faut réfléchir un peu avant de se précipiter sur l'indexation des clés étrangères.

  2. #22
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    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 822
    Points : 6 446
    Points
    6 446
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Merci de votre intervention mais, je connaît comment ça fonctionne sinon je n'aurais pas choisi ces exemples, n'est pas vrai ? Par ailleurs, les applications qui possèdent un peu de bon sens évitent de modifier la clé primaire vu qu'elle est immuable, donc ...

    En conclusion il faut rafraichir un peu avant de se précipiter sur l'indexation des clés étrangères.
    Oui... je voulais juste aller dans le même sens: n'indexer que quand c'est nécessaire, et se souvenir (i.e. documenter) la raison de la création de l'index.
    Cordialement,
    Franck.

  3. #23
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Il faut nuancer un peu ça sinon il y aura des indexes par tout!
    Il devient nécessaire d’indexer les contraintes d’intégrité du type FK uniquement lorsqu’on delete/update/merge la table mère dans un environnement OLTP multiutilisateurs et donc concurrent. Cette indexation est dictée par les soucis d’éviter des verrous (lock) et des inters blocages (deadlocks). Et, même si on est amené à indexer une FK pour lesdits soucis, il faut quand même s’assurer qu’il n’existe pas déjà un index qui couvre ces FK.

    Ce problème de verrous et d’inters-blocage écarté, il n’y aura alors aucune nécessité d’indexer une FK autre que celle éventuellement soulevée par un souci de performance. Mais là, on rejoint le cortège classique de l’indexation.

    Pour en revenir à votre exemple, pour provoquer un inter blocage lors d’une opération sur une table mère ayant une table fille dotée d’une FK non indexée, il faut qu’il y ait une tentative de transformation d’un verrou du type TM (DML) d’un mode 3(SX) à un mode 5 (SSX). Dans votre exemple la première session acquiert un verrou TM d’un mode 6 (X) et dans le déroulement de vos opérations il n’y a jamais eu une tentative de transformation d’un verrou du type TM du mode SX ou mode SSX. Par contre, en faisant les opérations suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    session1 > delete from t_fils where id_mere = 1;
    2 rows deleted.
     
    session1 > delete from t_mere where id_mere = 1;
    1 row deleted.
     
    session1 > start getlocks2;
     
           SID       WSID LOCK_TYPE            MODE_HELD       MODE_REQUESTED                                               
    ---------- ---------- -------------------- --------------- --------------                                              
           252        334 Transaction          EXCLUSIVE       SHARE
    Et dans la session 2 ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    session2 > insert into t_fils values (100, 1, 'test mohamed');
    A ce niveau, la session 2 bloque. Je reviens à la session 1 et je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    session1 > delete from t_mere where id_mere = 200;
    0 rows deleted.
    En revenant à la session 2 j'observe ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    session2 > insert into t_fils values (100, 1, 'test mohamed');
    insert into t_fils values (100, 1, 'test mohamed')
                *
    ERROR at line 1:
    ORA-00060: deadlock detected while waiting for resource
    L’inter blocage se produit toutes les 3 secondes, et j’ai été assez rapide pour obtenir l’image suivante avant le time out interne d’oracle (qui se réveille toutes les 3 secondes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    session3> start getlocks2
     
           SID       WSID LOCK_TYPE            MODE_HELD       MODE_REQUESTED       
    ---------- ---------- -------------------- --------------- ---------------      
           252        334 Transaction          EXCLUSIVE       SHARE                
           334        252 DML                  ROW-X (SX)      S/ROW-X (SSX)
    Où l’on voit bien qu’une tentative de transformation d’un verrou du type DML (TM) du mode SX vers le mode SSX sur une table fille ayant une FK non indexée a produit un inter-blocage. Si, j'indexe la FK cet inter blocage ne se produira pas

    Et enfin, la séquence des opérations ci-dessous a, à mon sens, plus de chance de se produire dans une application réelle que l’opération d’un lock d’une table fille explicite via la commande lock

  4. #24
    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 Mohamed.Houri Voir le message
    Il devient nécessaire d’indexer les contraintes d’intégrité du type FK uniquement lorsqu’on delete/update/merge la table mère dans un environnement OLTP multiutilisateurs et donc concurrent. ...
    Déjà le select for update à disparu ce qui est déjà bien!
    Il vous reste de faire le pas pour éliminer l’update qui ne modifié pas la clé primaire, ce qui devrait être la règle.
    Après éliminer parfois le delete pour les cases où tout simplement, fonctionnellement la suppression ne se fait pas.

Discussions similaires

  1. Outils d'interprétation des rapports STATSPACK
    Par alexisongagna dans le forum Outils
    Réponses: 0
    Dernier message: 31/01/2013, 15h46
  2. Interprétation du rapport Statspack
    Par farenheiit dans le forum Administration
    Réponses: 135
    Dernier message: 22/02/2008, 12h25
  3. hijackthis : interprétation du rapport
    Par erwann9 dans le forum Sécurité
    Réponses: 3
    Dernier message: 11/10/2006, 23h44
  4. Réponses: 1
    Dernier message: 07/10/2005, 11h44

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