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 :

Acces natif MySQL, SHOW FULL COLUMNS et SHOW INDEX [WD15]


Sujet :

WinDev

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 136
    Points : 241
    Points
    241
    Par défaut Acces natif MySQL, SHOW FULL COLUMNS et SHOW INDEX
    Bonjour,

    Je suis en train de passer un projet de HF classic vers MySQL.

    En regardant les logs du serveur MySQL, je vois que mon projet Windev envoi les requêtes suivantes avec le premier HLitRecherchePremier de chaque table par fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SHOW FULL COLUMNS FROM xxx
    SHOW INDEX FROM xxx
    En gros, j'ouvre la fenêtre qui s'initialise par un parcours HLitRecherchePremier, j'ai les requêtes précédentes. Je relance la recherche sans quitter la fenêtre, je ne les ai pas mais si je ferme la fenêtre et que je la réouvre, je les ai de nouveau.

    Que Windev fasse ces requêtes une fois par ouverture du programme, je suis d'accord (même s'il pourrait se contenter de se baser sur ce qu'il y a dans l'analyse du projet) mais qu'il le fasse sur chaque fenêtre, ça me déplait et surtout, ça plombe mes temps de traitement.
    Le but étant de ne pas réécrire tout le projet (d'autant qu'il sera utilisé aussi bien avec une base HF que MySQL), quelqu'un a-t-il une solution pour lui dire de ne pas envoyer ces requêtes au serveur MySQL ?

    Pour ma connexion à la base MySQL, j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HChangeConnexion(matable, s_Mon_Id_ConnexionMySQL)
    Ceci dans une boucle qui liste (presque) toutes mes tables.

    J'ai tenté un
    après cette boucle, sans amélioration.

  2. #2
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour

    Il n'y pas de solution miracle malheureusement et tu ne pourras pas modifier la sauce interne des instructions H...

    Je sais bien que tu vas pas ré-écrire ton application mais dès que tu en as la possibilité remplace ces ordres H.. par du SQL
    La fait est que les instructions HLitRecherche... sont très gourmandes en ressources parce qu'elles envoient tout un tas de requêtes
    J'avais vérifié les logs sur db2/400 c'était assez effarant

    En utilisant du SQL standard, accepté aussi bien par MySql et HF bien sur, tu y gagnera beaucoup

    Et surtout si tu le fais utilise HExecuteRequêteSQL avec le paramètre hRequêteSansCorrection, ça évitera au moteur Windev de contrôler ta requête ou la modifier à sa sauce
    ou carrément les fonctions SQL...

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 136
    Points : 241
    Points
    241
    Par défaut
    Le fait que cela plombe les perf c'est que les requêtes SHOW INDEX ET SHOW FULL COLUMNS demande un temps d'exécution important.

    Pour palier à ce problème, il suffit de mettre à faux la variable global innodb_stats_on_metadata du serveur MySQL en lançant cette requête sur le serveur de la base (une seule fois, il ne faut pas mettre cette requête dans le code de votre projet, le DBA n'appréciera pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET GLOBAL innodb_stats_on_metadata=0
    Où, si vous préférez utiliser le Workbench, vous retrouverez cette variable dans la partie configuration, onglet "InnoDB Parameters", dans la partie "General".

    A priori, cela ne va plus mettre à jour les stats sur les tables InnoDB.
    Ces stats sont utilisé par MySQL pour choisir les indexes à utiliser (si vous ne précisez pas les index dans vos requêtes, sachant que si vous n'utilisez que des fonctions H*, il ne devrait pas y avoir de soucis étant donné que vous n'interrogé qu'une table à la fois). Si MySQL utilise le mauvais index, les temps d'exécution des requêtes peuvent être plus long.
    Il faudrait donc faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ANALYZE TABLE xxx // xxx étant le nom de votre table
    sur chacune des tables pour prévenir ce souci. Personnellement, je vais placer l'exécution de cette requête dans une tâche planifié qui tournera soit tous les jours soit tous les dimanches (1 fois par semaine devrait être largement suffisant).

    J'ai trouvé cette solution grâce à cette page : http://www.mysqlperformanceblog.com/...hema-slowness/
    et ici : http://www.mysqlperformanceblog.com/...n-it-can-bite/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD10] Connexion avec l'accès natif MySQL
    Par dj-julio dans le forum WinDev
    Réponses: 5
    Dernier message: 20/02/2012, 12h38
  2. installation acces natif MySQL linux
    Par lVlatthieu dans le forum WinDev
    Réponses: 3
    Dernier message: 10/07/2007, 19h54
  3. [WD9] Acces natif Mysql
    Par nfrancky dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 09/06/2007, 01h00
  4. [WinDev 10] WinDev accès natif mysql
    Par joelviscarros dans le forum WinDev
    Réponses: 4
    Dernier message: 27/11/2006, 21h02
  5. Erreur accès natif Mysql
    Par joelviscarros dans le forum WinDev
    Réponses: 1
    Dernier message: 17/11/2006, 12h54

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