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 :

Requête SQL Time out sur un environnement et non sur un autre


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Par défaut Requête SQL Time out sur un environnement et non sur un autre
    Bonsoir,

    Voici mon problème en quelques lignes:

    J'ai une requête SQL qui s'exécute rapidement (2 sec) dans un environnement mais tombe en "time out" sur deux autres environnements (les trois environnements sont en oracle 11g).

    Les trois environnements sont compatibles: développement, test, pré prod.

    Si vous avez des pistes n'hésitez pas svp.

    Merci d'avance.

  2. #2
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 31
    Par défaut
    Bonjour à vous,

    Est-ce que vous pouvez envoyer la requête sql complète.. (S'il n'y a pas d'information nominative)..?

    Ainsi que le plan d'exécution dans les trois environnements afin que l'on puisse comparer.

    Exemple de requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select subject_id from client.human_subject where health_card_number = :1;
    Exemple de plan d'exécution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    set linesize 120
     
    explain plan for select subject_id from client.human_subject where health_card_number = :1;
     
    select * from table(dbms_xplan.display());
     
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------
    Plan hash value: 1682161945
     
    ---------------------------------------------------------------------------------------------------------
    | Id  | Operation                           | Name              | Rows  | Bytes | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT                    |                   |     1 |    18 |     4   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| HUMAN_SUBJECT     |     1 |    18 |     4   (0)| 00:00:01 |
    |*  2 |   INDEX RANGE SCAN                  | XIE1HUMAN_SUBJECT |     1 |       |     3   (0)| 00:00:01 |
    ---------------------------------------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
     
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------
     
       2 - access("HEALTH_CARD_NUMBER"=:1)
     
    14 lignes sélectionnées.
    Si le plan d'exécution est relativement le même, on pourra regarder autre chose...

  3. #3
    Membre éclairé Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Par défaut
    Bonjour,

    Voici ma requête (bien sur après modification des noms de tables ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    SELECT V.Champ1,
           V.DESCR,
    	   TO_CHAR(V.Date1,'YYYY-MM-DD'),
    	   TO_CHAR(V.Date,'YYYY-MM-DD'),
    	   V.UserID,
    	   V.COUNTER
    FROM ( SELECT DISTINCT A.Champ1,
    		A.DESCR,
    		A.Date1,
    		A.Date,
    		A.UserID,
    		(SELECT COUNT(*) FROM Table_NBR WHERE Champ1=A.Champ1
    		) AS COUNTER
    	   FROM Ma_Vue A
    	   WHERE UPPER(A.Champ1) LIKE '%QRY%'
    	   AND EXISTS ( SELECT 'X'
    					FROM Ma_Vue A1
    					WHERE A1.Champ1 = A.Champ1
    					AND A1.Champ1 LIKE '%Val2%'
    		          )
    	   AND EXISTS ( SELECT 'X'
    					FROM Ma_Vue A2
    					WHERE A2.Champ1 = A.Champ1
    					AND A2.Champ1 LIKE '%Val3%'
    				  )
    	   ORDER BY COUNTER ASC
      ) V
    WHERE ROWNUM <=300;
    C'est un peu compliqué mais je vais essayer d'expliquer ce que je veux:
    Imaginant ma vue Ma_Vue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Champ1 - Champ_Recherche
    QRY1      Val1  
    QRY1      Val2
    QRY1      Val3
    QRY1      Val4  
    QRY2      Val1
    QRY2      Val2
    QRY2      Val3
    QRY3      Val1
    QRY3      Val2
    le but de ma requête est de chercher s'il existe dans ma vue des lignes avec "Champ1" like %QRY% ET Champ_Recherche = Val2 ET Champ_Recherche = Val3.
    le résultat doit être QRY1 et QRY2.

    Je ne veux pas de la ligne QRY3 parce que la ligne (QRY3, Val3) n'existe pas.

    Concernant le plan d'exécution, je travaille avec SQLDevelopper, et son plan d'exécution ne ressemble pas au plan vu dans le mesage précédent.

    Voilà, j'espère que vous aller comprendre l'objectif de la requête.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    Juste par curiosité qu'est ce que ça donne écrit comme ça (qualité des résultats, perfs) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    SELECT V.Champ1,
           V.DESCR,
    	   TO_CHAR(V.Date1,'YYYY-MM-DD'),
    	   TO_CHAR(V.Date,'YYYY-MM-DD'),
    	   V.UserID,
    	   V.COUNTER
      FROM (SELECT A.Champ1,
    	           A.DESCR,
    	           A.Date1,
    	           A.Date,
    	           A.UserID,
                   COUNT(*) AS COUNTER
              FROM Ma_Vue A
              left join Table_NBR on Champ1=A.Champ1
             WHERE UPPER(A.Champ1) LIKE '%QRY%'
               and (   A.Champ2 LIKE '%Val2%'
                    or A.Champ2 LIKE '%Val3%'
                   )
             group by A.Champ1,
    	              A.DESCR,
    	              A.Date1,
    	              A.Date,
    	              A.UserID
            having sum(case when A.Champ2 LIKE '%Val2%' then 1 end) > 1
               and sum(case when A.Champ2 LIKE '%Val3%' then 1 end) > 1
             ORDER BY COUNTER ASC
           ) V
     WHERE ROWNUM <=300;
    Sinon, vous allez devoir essayer de récupérer les plans sur les 3 environnements ou même mieux la trace 10046 pour pouvoir faire des comparaisons.
    https://blog.developpez.com/pachot/u...an_statistics/

    Et sinon, également l'habituelle question, les stats sont elles à jour sur tous les environnements ?

  5. #5
    Membre éclairé Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Par défaut
    Merci skuatamad, c'est beaucoup plus rapide, mais y a pb ... le champ counter ne retourne pas la bonne valeur.
    je check..

  6. #6
    Membre éclairé Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Par défaut
    peut être une explication,
    la requête ne retourne pas de résultat si le counter est = 0, je pense c'est à cause du LEFT JOIN.

    y a pas un autre moyen pour me permettre de récupérer les lignes avec le counter =0 ?

Discussions similaires

  1. Question sur l'environnement de dvpt sur oracle
    Par Baban Moah dans le forum ALM
    Réponses: 0
    Dernier message: 08/04/2017, 16h38
  2. Réponses: 3
    Dernier message: 16/04/2011, 16h39
  3. Réponses: 4
    Dernier message: 20/04/2008, 23h38
  4. Réponses: 15
    Dernier message: 11/05/2007, 16h28
  5. lien marche sur internet explorer et non sur autre
    Par xman_genius dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/04/2006, 19h11

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