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 :

Requêtes étranges : OpiQuery et autres


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut Requêtes étranges : OpiQuery et autres
    Bonjour !

    Je maintiens une appli java qui tournait sur TOmcat 4 avec Oracle 8i.
    Suite au passage de la BD en Oracle 9i, Tomcat 4 tombe en java out of memory error...
    Nous avons donc migré en Tomcat 5 (est-ce judicieux?) et mené un audit transactionnel.
    Je remarque dans les résultats que toutes mes requêtes SQL métier sont entourées de requêtes SQL intempestives telles que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Oracle: Execute OpiQuery=OOPEN 
    Oracle: Prepare&Execute SqlQuery=requete métier'
    Oracle: Execute OpiQuery=ODNY
    Oracle: Execute OpiQuery=OALL7 Fetch RowRequested=10
    Oracle: Execute OpiQuery=OALL7 Fetch RowRequested=10
    Oracle: Execute OpiQuery=OCANCEL
    Oracle: Execute OpiQuery=OCLOSE
    Oracle: Execute OpiQuery=OROLL
    Oracle: Execute OpiQuery=OCOMON
    ou alors ce genre de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Oracle: Prepare&Execute SqlQuery='ALTER SESSION SET isolation_level = READ committed'
    Oracle: Execute OpiQuery=OOPEN
    Oracle: Prepare&Execute SqlQuery='ALTER SESSION SET isolation_level = READ committed'
    Oracle: Execute OpiQuery=OCLOSE
    Oracle: Prepare&Execute SqlQuery='SET TRANSACTION READ write'
    Oracle: Execute OpiQuery=OOPEN
    Oracle: Prepare&Execute SqlQuery='SET TRANSACTION READ write'
    Oracle: Execute OpiQuery=OCLOSE
    Qu'est-ce qu'une OpiQuery ?....

    Voici comment sont appelées mes requêtes dans mon code Java :

    - POUR UN SELECT
    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
     
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
     
    String sql = "select  ... from ... where ..."; 
    try{
         conn = ds.getConnection();
         stmt = conn.createStatement ();
     
         rs = stmt.executeQuery(sql);
            if ( rs.next() ) {
                return true;
            }
     
            return false;
         }
    }
    ...
    - POUR UN UPDATE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
     
    String sql = "update ... set ... where ..."; 
    try{
         conn = ds.getConnection();
         stmt = conn.createStatement ();
     
         int rowsAffected = 0;
         rowsAffected = stmt.executeUpdate (sql);
    }
    ...

    Est-ce que qqun peut m'aider ?
    D'avance merci

  2. #2
    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
    Les fonctions O<quelque chose> sont probablement des fonctions OCI (Oracle Call Interface = interface C utilisée par tous les clients Oracle directement ou indirectement) appelées par JDBC: cela doit être normal.

    Les commandes:
    'ALTER SESSION SET isolation_level = READ committed'
    'SET TRANSACTION READ write'
    me semblent inutiles car ce sont les options par défaut d'une transaction Oracle.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    Merci Pifor,

    Les commandes:


    'ALTER SESSION SET isolation_level = READ committed'
    'SET TRANSACTION READ write'

    me semblent inutiles car ce sont les options par défaut d'une transaction Oracle.
    Je suis d'accord avec toi, mais ces ordres SQL sont lancés sans que je le demande explicitement.. Est-ce que cela peut provenir du paramétrage de la base de données ?

    Merci

  4. #4
    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
    non, c'est Tomcat qui fait ça. Faut pas s'inquiéter

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    OK mais cela apparait énormément de fois dans mon audit...
    Ces requetes prennent entre 36 et 54% du temps total d'éxécution des requêtes, c'est normal ?....

  6. #6
    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
    Non, ce n'est pas normal. Comment obtenez-vous ces chiffres ? Avec quel outil ? Combien de fois sont executées ces requêtes ?
    Avez-vous essayé la trace SQL et TKPROF ?

  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
    ça peut être normal. En java on lance souvent beaucoup de petites requêtes et une connexion à chaque fois.

  8. #8
    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
    Ce type de programmation est considérée par Oracle comme l'erreur n°1 dans les problèmes de performances ...

  9. #9
    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
    complétement... mais là c'est la faute aux architectures n-tiers qui se reconnectent à chaque fois... une grande "spécialité" des applis java

    Ceci étant, je serais surpris qu'un changement de contexte dans la session soit à l'origine d'un problème de perf

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    La personne habilitée a utilisé Application Vantage ..
    J'obtiens cela :

    Durée utile Durée totale Durée Overhead
    Processus 1 1,06 15,29 14,23
    Processus 2 1,02 11,33 10,31
    Processus 3 1,42 9,5 8,08
    Processus 4 1,04 29,6 28,56
    Processus 5 0,98 27,8 26,82

    L'overhead, c'est bien les temps où il ne se passe rien ?.......
    En gros 70% des requetes appelées sont ces requetes étranges, pour un processus donné.

  11. #11
    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
    oui enfin, l'overhead peut venir des disques, du réseau, etc... on ne sait pas comment c'est mesuré alors bon

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    OK ..
    Bon en gros, mes requetes ne posent pas tant de pb que ca (de toute façon c'est bien le résultat du rapport d'audit vu les graphes).

    Ceci étant, mais là je ne suis plus dans le bon forum, comment optimiser mon code java ... Sachant que chaque requete est appelée dans une méthode, puis-je ouvrir la connection au niveau de la classe et non au niveau de chaque méthode ?

  13. #13
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Ah, ah, nous y voila !
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    ??......

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    Peux-tu mettre des infos plus détaillées sur le forum (avec les OS, leur versions, les versions du jdbc avant/après, les pools de connexion...)

    Voici quelques informations complémentaires qui pourront peut-être aider.
    -*- Application -*-
    - J2EE 1.3
    - Pas d'outil de persistance

    -*- Environnement Oracle 8i - Tomcat 4 -*-
    OS serveur BDD : AIX
    OS serveur d'appli : Windows 2000
    Driver JDBC : oracle.jdbc.driver.OracleDriver -> classes12.zip


    - Environnement Oracle 9i - Tomcat 4 -*-
    OS serveur BDD : AIX
    OS serveur d'appli : Windows 2000
    Driver JDBC : oracle.jdbc.driver.OracleDriver -> classes12.zip


    - Environnement Oracle 9i - Tomcat 5 -*-
    OS serveur BDD : AIX
    OS serveur d'appli : Windows Server 2003
    Driver JDBC : oracle.jdbc.driver.OracleDriver -> classes12.zip

    A propos du driver, sur le site d'Oracle (http://www.oracle.com/technology/sof.../jdbc9201.html) :
    - Oracle 9.2.0.5 : classes12.zip
    - Oracle 9.2.0.8 : classes12.rar

    Ma BD est en Oracle 9.2.0.7...... Faudrait-il le fichier classes12.jar ?

    Datasource : géré dans l'appli, dans le struts-config.xml

    <data-sources>
    <data-source autoCommit="true"
    description="Data Source Description"
    driverClass="oracle.jdbc.driver.OracleDriver"
    maxCount="40"
    minCount="2"
    loginTimeout="60"
    user="moi"
    password="monMotDePasse"
    url="jdbc:oracle:thin:@X.X.X.X:XXXX:MaBase"/>
    </data-sources>

    peut-être faut-il déclarer <data-source type="oracle.jdbc.pool.OracleDataSource"> ?

    Merci

Discussions similaires

  1. Lire une requête existante dans une autre base
    Par nicolas2603 dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/02/2008, 17h38
  2. Distribuer les requêtes SQL vers d'autres serveurs BD
    Par mega_info dans le forum Requêtes
    Réponses: 3
    Dernier message: 11/10/2007, 16h51
  3. Requêtes étranges : OpiQuery et autres
    Par babylone7 dans le forum Oracle
    Réponses: 14
    Dernier message: 17/08/2007, 14h01
  4. [Requête + VBA] INSERT INTO autre base
    Par Zartak dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/05/2007, 14h29
  5. [MySQL] Une requête fonctionne et l'autre pas vraiment...
    Par gazouza dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/03/2006, 10h49

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