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

WinDev Discussion :

Requete Interbase, Temps de réponse long.


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Par défaut Requete Interbase, Temps de réponse long.
    Bonjour,
    Je viens vers vous, car je n'arrive pas à trouver de solution à mon problème.
    En effet lorsque via mon projet windev j'effectue une requête sur une base de donnée Interbase, le temps de réponse est d'approximativement 6 secondes, que ce soit sur un SELECT ou un UPDATE et je n'arrive pas à savoir pourquoi...

    J'ai essayé plusieurs méthodes, SQLConnect avec SQLexec et aussi HOuvreConnexion avec la connexion en paramètre et hsqlexecute(). Mais toujours le même temps de réponse par contre sur une base de données mysql pas de soucis.

    Voila si quelqu'un à une idée formidable a me proposer je suis tout ouïe.

    Merci d'avance !

  2. #2
    Membre très actif

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Par défaut
    Bonjour,

    Interbase est une base de type fichier comme Acces et Hyperfile SQLLite etc...
    MySQL, PostgreSQL, Oracle sont des systèmes de type CS avec une gestion serveur des données.

    Il faudrait savoir quelle est la requête (code)
    Combien d'enregistrement elle est sensée retourner
    Combien de lignes contient le fichier de départ
    Quel est le poids du fichier de la base en Mo

    + Un schéma du traitement appliqué aux données ( ne me donnez pas de code juste un algo en pseudo-code)

    Ces conditions détertminent l'angle d'attaque le plus pertinent pour ce type de base

    Cordialement,

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Par défaut
    Je ne pourrais pas répondre à toutes ces question car je ne connais pas la réponse pour certaine mais je vais faire au mieux !

    Pour la requete, 2 différent un SELECT et un UPDATE :

    "SELECT * FROM F_APPVRACL WHERE AVL_NUMPAL = %1;"

    "UPDATE f_appvracl SET AVL_DESTOCKAGE = 'O' WHERE AVL_DESTOCKAGE = 'N'
    AND AVL_NUMPAL = %1;"

    Le SELECT me sert unique pour faire une requete test sur la base pour voir si la connexion est toujours disponible.
    l'UPDATE n'agit que sur une seule ligne de la table.

    Le nombre d’enregistrement retourné : pour le SELECT peu import apres l'execution de la requete je fait un hlitpremier() unique sur une seule donnée de la table pour voir si elle n'est pas vide.
    L'UPDATE n'est pas censée retourner quelque chose.

    Je viens de faire un count sur la table et elle contient 223003 élément (mais va continuer à s’agrandir !)

    La base pèse environ : 709 Mo (même chose va continuer de s'agrandir)

    Par contre le schéma du traitement appliqué aux données, je ne sais pas du tout ce que c'est.

  4. #4
    Membre Expert Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 889
    Par défaut
    Citation Envoyé par zozo66180 Voir le message
    Je ne pourrais pas répondre à toutes ces question car je ne connais pas la réponse pour certaine mais je vais faire au mieux !

    Pour la requete, 2 différent un SELECT et un UPDATE :

    "SELECT * FROM F_APPVRACL WHERE AVL_NUMPAL = %1;"
    est-il nécessaire que tu rapatries toutes les colonnes avec *
    est-ce que AVL_NUMPAL est indexé

    Citation Envoyé par zozo66180 Voir le message

    "UPDATE f_appvracl SET AVL_DESTOCKAGE = 'O' WHERE AVL_DESTOCKAGE = 'N'
    AND AVL_NUMPAL = %1;"

    Le SELECT me sert unique pour faire une requete test sur la base pour voir si la connexion est toujours disponible.
    l'UPDATE n'agit que sur une seule ligne de la table.

    Le nombre d’enregistrement retourné : pour le SELECT peu import apres l'execution de la requete je fait un hlitpremier() unique sur une seule donnée de la table pour voir si elle n'est pas vide.
    L'UPDATE n'est pas censée retourner quelque chose.

    Je viens de faire un count sur la table et elle contient 223003 élément (mais va continuer à s’agrandir !)

    La base pèse environ : 709 Mo (même chose va continuer de s'agrandir)

    Par contre le schéma du traitement appliqué aux données, je ne sais pas du tout ce que c'est.
    Faux : ce n'est pas parce que tu ne lis que le premier enregistrement du résultat de ta requête que le nombre d'enregistrement qu'elle retourne n'a pas d'importance sur son temps d'exécution. Puisque toutes les données qu'elle retourne vont transiter par le réseau... donc plus elles sont nombreuses plus c'est long...

    Si ton select ne sert qu'à vérifier l'état de la connexion, tu devrais le faire sur un tout petit fichier et t'assurant de ne demander en retour qu'une seule rubrique d'un seul enregistrement

    Pour le UPDATE assure toi que que AVL_DESTOCKAGE et AVL_NUMPAL soient indexés...

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 434
    Par défaut
    Bonjour,
    Citation Envoyé par zozo66180 Voir le message
    Le SELECT me sert unique pour faire une requete test sur la base pour voir si la connexion est toujours disponible.
    Dans ce cas une requête bien plus simple fera l'affaire:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select 1 from dual
    Aucun accès à aucune table, je ne vois pas plus rapide.

    Tatayo.

  6. #6
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Citation Envoyé par Atsibat Voir le message
    Bonjour,

    Interbase est une base de type fichier comme Acces et Hyperfile SQLLite etc...
    Juste pour information, cette assertion est complètement fausse. Interbase est une base client/serveur au même titre que les autres bases client/serveur.

  7. #7
    Membre très actif

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Par défaut
    Bonjour,

    pour le coup du client serveur ça dépends de la version en fait d'après leur site :

    InterBase Desktop Edition est disponible pour Windows. C'est une puissante solution destinée aux applications autonomes mono-utilisateur.

    InterBase ToGo est disponible pour iOS, Windows et Mac OS X et fonctionne également en environnement autonome tout en autorisant le déploiement d'applications utilisant directement les DLL du moteur d'InterBase. Ne nécessitant pas l'exécution d'un processus distinct de serveur de base de données, le moteur est exécuté dans l'espace du processus applicatif pour réduire son encombrement au minimum.

    IBLite est une nouvelle base de données pouvant être déployée gratuitement et intégrée sous iOS pour fonctionner de façon autonome et autoriser la diffusion d'applications utilisant directement le moteur d'InterBase.

    InterBase Server peut connecter à une base de données des centaines d'utilisateurs simultanés. Il fonctionne sous Windows, Linux, Solaris et Mac OS X.

    Et à mon avis seule la version InterBase Server est vraiment ce que nous appelons CS...
    Pour ce qui est de Hyperfile je dirais que la version CS est en réalité une version SGDB fichier utiisée à la sauce CS mais ça reste du fichier.

    Bon dev

  8. #8
    Membre très actif

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Par défaut
    Bonjour,

    pour la requête il faut :

    1 SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT ID FROM F_APPVRACL LIMIT 1;"
    c'est suffisant

    2 UPDATE
    il faut indexer AVL_DESTOCKAGE si tu fais souvent ce type de requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "UPDATE f_appvracl SET AVL_DESTOCKAGE = 'O' WHERE AVL_DESTOCKAGE = 'N'
    AND AVL_NUMPAL = %1;"
    3
    Sinon il faut récupérer les résultats avec la liste des ID
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "UPDATE f_appvracl SET AVL_DESTOCKAGE = 'O' WHERE ID IN (SELECT ID FROM F_APPVRACL WHERE AVL_DESTOCKAGE = 'N'
    AND AVL_NUMPAL = %1); "
    ce qui va ter permettre de parcourir la table très vite sur l'ID et de ne faire ton update que sur les lignes concernées.

    Essaye un peu et dis nous.

    Bon dev

  9. #9
    Membre Expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Par défaut
    Pour info pour qu'un HLItPremier fonctionne il faut que le curseur complet ait été lu donc ... le moteur coté WinDev prends du temps pour récupérer cette donnée.

    La question que je poserai est :
    - quel temps la requete met sur le même PC en passant par un outil de requetage standard ?

    Si c'est le même temps => PB serveur ou réseau
    Si c'est plus rapide avec le requeteur => PB coté WinDev

  10. #10
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 434
    Par défaut
    Citation Envoyé par Atsibat Voir le message
    2 UPDATE
    3
    Sinon il faut récupérer les résultats avec la liste des ID
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "UPDATE f_appvracl SET AVL_DESTOCKAGE = 'O' WHERE ID IN (SELECT ID FROM F_APPVRACL WHERE AVL_DESTOCKAGE = 'N'
    AND AVL_NUMPAL = %1); "
    ce qui va ter permettre de parcourir la table très vite sur l'ID et de ne faire ton update que sur les lignes concernées.
    A mon avis ça ne change pas grand chose, car il faut de toute façon parcourir la table dans la sous-requête.
    Je pense qu'il faut surtout indexer AVL_NUMPAL. En effet AVL_DESTOCKAGE semble entre un booleen (enfin une chaine utilisée comme telle), donc 2 valeurs possibles, alors que AVL_NUMPAL doit être un numérique ou apparenté. Un index dessus sera plus discriminant.

    Tatayo.

  11. #11
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Historiquement, Interbase est une base client/serveur, même la version "embedded" est considéré comme client/serveur, la seule différence étant que le serveur tourne sous la forme de dll et est intégré dans le process parent.

Discussions similaires

  1. switch temps de réponse long
    Par keneda95 dans le forum Hardware
    Réponses: 2
    Dernier message: 24/09/2014, 14h58
  2. [Designer V5-V6] Temps de réponse long avec table dérivée
    Par dvdavid dans le forum Débuter
    Réponses: 4
    Dernier message: 19/11/2010, 15h00
  3. CSocket temps de réponse long pour connect
    Par lio33 dans le forum MFC
    Réponses: 1
    Dernier message: 18/12/2006, 22h28
  4. [OLAP]temps réponse longs avec Excel
    Par crazy dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/07/2006, 09h22
  5. temp de réponse trop long
    Par maxidoove dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/10/2005, 18h24

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