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

Access Discussion :

[Généralités] Lenteur requete avec ODBC (Oracle)


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 25
    Points : 11
    Points
    11
    Par défaut [Généralités] Lenteur requete avec ODBC (Oracle)
    Bonjour,

    j'ai un petit souci :

    -J'ai une requete dans un programme access qui va récupérer dans une DB Oracle un enregistrement selon un critère de sélection (le numéro de la personne) : sur le champ "Nummer".

    -J'ai, quand je rentre manuellement le critère dans access (sur la ligne "Critères") de l'outil de création de requête, cela va très vite (presque instantané).

    -problème : au lieu de rentrer manuellement le "Nummer", je voudrais lier le champ "Nummer" de la table de la DB Oracle avec le champ "Nummer" d'un table locale à l'application Access pour le critère de sélection.
    Je parle bien d'une liaison DANS l'outil de création de requête entre les champs "Nummer" des 2 tables et non de créer une relation entre tables.
    En fait, cela fonctionne mais prend un temps tres tres long (presque 1 minute).

    D'où cela peut-il provenir ?

    D'avance, merci.

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    par expérience, j'ai constaté que les requêtes sur des tables ODBC étaient plus rapides en faisant la "jointure" dans la clause WHERE plutôt que dans la clause FROM .. JOIN ...
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Bonjour, merci pour ta réponse.

    J'ai modifié la requête mais cela ne change malheureusement pas le temps d'execution de celle-ci...

    Je met ici la requete :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Tab_Locale_Finale ( Nom, Nummer1, Nummer2 ) 
    SELECT DISTINCT Tab_Oracle.Nom, Tab_Locale_Temp.Nummer1, 
    Tab_Locale_Temp.Nummer2 FROM Tab_Oracle, Tab_Locale_Temp WHERE
    (((Tab_Oracle.NUMMER)=[Tab_Locale_Temp].[Nummer1]));
    Peut-être le code de la requête vous permettra de me dire d'où peut provenir la lenteur...
    Cette requete me semble pourtant simple.

    A bientôt.

  4. #4
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    Le problème vient sans doute du fait que Access se charge lui même des requetes qu'il ne peut pas confier au moteur Oracle...
    Vu que tu fais référence à une table locale... c'est forcément Access qui travaille et donc l'ensemble de ta table tab_Oracle est rapatriée en locale... pour que le Jet fasse la jointure.

    Il faut donc que tu fasses en sorte, si possible, que le traitement soit coté Oracle. Soit en plaçant la table locale ... sur le serveur, soit en revoyant ta requête pour , par exemple , revenir à l'équivalent de ton essai critère manuel (par exemple en faisant une boucle en VBA sur ta table locale ...)
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Tu as essayé une requête SQL Direct ?

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Il faudrait demander à celui qui administre la base, quels sont les champs qui sont indexés ... voire qu'il indexe un champ pour toi ... ça pourrait tout changer en terme de performances ...
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Rebonjour,

    Tout d'abord merci pour vos réponses.
    -J'ai essayé en SQL direct : un peu plus rapide mais pas terrible.
    -mout1234 : ton idée n'est pas bête du tout, je vais y réfléchir.
    -Pour l'indexation, je vais voir ce que mes collègues me diront.

    Sinon, j'ai effectué quelques tests :
    Le serveur étant en Oracle 9i et que les clients étaient 8i, j'ai fait un test sur une machine en la passant en Client 9i. Résultat : pas plus rapide.

    MAIS :
    J'ai testé avec un autre driver pour Oracle (Microsoft ODBC for Oracle) :
    Et la, le temps d'execution est divisé par 4 environ (mais toujours lent...)

    D'où la question que je me pose : quel est le driver qu'il serait préférable d'utiliser ? Avez-vous des suggestions ? Le problèmes ne proviendrait-il pas du Driver ?
    J'avoue que je ne connais pas très bien les différents drivers disponible...

    Merci d'avance.

    a+

  8. #8
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    J'utilise ce driver : Microsoft ODBC for Oracle

    Après, il faut rationaliser ce qu'on entend par lent ...
    C'est peut être un temps raisonnable vu ce que tu demandes en sortie.

    Si ta requête est stratégique, ça doit être possible d'indexer le champ sur lequel tu "joins" tes deux tables ...
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Ok, je vais faire des tests.
    Le problèmes c'est que cette simple requete prend 15 secondes.
    J'ai une dizaine de macro executée contenant chacune environ 10 requetes.
    Et chaque macro doit etre executée pour environs 250 clients.

    En tout cas merci pour vos pistes. L'indexation s'averera peut-etre nécessaire mais je ne sais pas si nous pouvons toucher à la DB de notre site ca il s'agit d'un replica de la maison mère.

    Bonne journée à tous.

  10. #10
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Question stupide : Pourquoi ta macro ne gère pas les 250 clients d'un coup ? (c'est 250 fois plus lent ?)
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  11. #11
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    En tuilisant du SQL direct, la chaine sql est envoyée directement à oracle. Tu peux donc utiliser la synatxe SQL Oracle. A priori tu vas pouvoir te servir des hint dans les requêtes pour résoudre un problème d'indexation.

  12. #12
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Pour info, je me souviens maintenant que j'ai eu une fois des problèmes de driver ODBC Oracle chez un client qui entranait des temps de réponse catastrophiques... j'ai résolu le problème en remplaçant le driver MS par le driver Oracle...


    C'était il y a 2 ans environ, je ne me souviens plus des versions précises des drivers mais je crois qu'il s'aigissait d'un Oracle v8.
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    -cafeine : Il s'agit d'un programme que je doit reprendre (je ne l'ai pas conçu). Mais en gros, les fonctionnalités qu'offrent le programme ont surement du obliger le développeur à fonctionner une traitant les clients au cas par cas.

    -Tofalu : je ne connais pas les hint, je vais me renseigner, merci.

    -mout1234 : c'est en remplaçant les drivers Oracle par les drivers MS que ça va plus vite.

    Par contre, même en installant le client 9i, je m'aperçois que le driver Oracle 9 n'est pas présent dans les choix des drivers ODBC. Est-ce normal ?

    Bonne journée à tous.

Discussions similaires

  1. lenteur requete avec forms
    Par c.langlet dans le forum Forms
    Réponses: 0
    Dernier message: 05/09/2008, 14h19
  2. Lenteur requetes ADO SQL server
    Par StarMusic dans le forum Bases de données
    Réponses: 10
    Dernier message: 11/08/2006, 13h43
  3. lenteur ennorme avec outlook2003pro
    Par azd dans le forum Outlook
    Réponses: 3
    Dernier message: 24/01/2006, 14h56
  4. Réponses: 3
    Dernier message: 16/12/2005, 15h44
  5. [Tomcat][Struts] Lenteur upload avec ie
    Par Yali dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 26/08/2005, 16h52

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