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

Installation MySQL Discussion :

mysqld concurrence et queries


Sujet :

Installation MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 190
    Par défaut mysqld concurrence et queries
    Bonjour,

    J'ai installé un mysql 5.6 avec la configuration par defaut sur un centos 7 et et windows 7.

    j'ai un script python qui lance plusieurs thread en parallèle avec pour chacun, l'exécution d'un select * from mytable limit start,nbrows pour paginer su la même table et gagner du temps. normalement il n y a pas de croisement ou de chevauchement entre les select.


    j'ai 5 workers qui tournent par tour avec une pagination de 10000 rows, ma table contient 210000 records et je mets 18 minutes pour traiter mon batch sur linux

    je dois préciser que j'intérroge en asynchrone un web service pour chacune des lignes du select des 10000 lignes chargées.

    j'ai l'impression que je coince un peu du côté mysql en terme de latence. je ne fais que des select sur la table et je produits un fichier résultat sous forme csv à la fin.

    mon serveur linux a 16GBRAM, quels sont les paramètres mysqld que vous me conseillerez de modifier pour améliorer la concurrence et la performance des queries.

    y a t'il un outil qui pourrait générer un fichier my.cnf pour mysqld selon la config machine.

    Merci pour vos conseils.
    cdt
    JP

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    je dois préciser que j'intérroge en asynchrone un web service pour chacune des lignes du select des 10000 lignes chargées.
    C'est probablement ça qui prend beaucoup de temps.
    Quel est le rôle de ce job ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 190
    Par défaut
    bonjour,

    C'est pour interroger un web service concernant des règles expertes transaction par transaction, selon le résultat du service la transaction est ensuite marquée pour produire des statistiques (sucre d'orges, catmenbert) .
    je stocke l'id transaction avec le resultat dans une map mémoire.

    Je suis maintenant descendu en dessous de 5 minutes de traitement pour 220000 lignes de résutlats avec 2 thread en parallèle et de l'asyncrhone au niveau des requêtes http du web service. mais je pense qu'on peut améliorer les paramètres par défaut de mysql
    pour la concurrence des select paginée sur la même table, c'est une table simple avec un index sur un identifiant unique, je charge par 10000 ligne ,mais les queries ne se croisent pas, elles adressent une partie de la table.

    Je peux règler le nombre de thread en parallel de 2 à 10 selon, mais il semble que je gagne pas beaucoup quand il y en a 2 ou 10. je pense que ca attend côté mysql, c'est à peu près les même temps, comme si il exécutait une requete à la fois sur la même table.
    pour l'instant je reste à deux worker, il me semblait qu'il n y avait pas de lock lorsque 'on faisait des query. je n'ai pas d'update, d'insert, delete.
    thread 1
    SELECT (chp1,chp2,chp3,chp4,chp5) FROM transresult ORDER BY uniqueId LIMIT 0,10000
    thread 2
    SELECT (chp1,chp2,chp3,chp4,chp5) FROM transresult ORDER BY uniqueId LIMIT 10000,10000
    etc..

    Je demande au cas ou, je suis certains que je peux gagner encore un peu avec les paramètres de myqsld, mais le paramètrage semble complexe, il va me falloir du temps pour identifier les bons paramètres mysql et améliorer la concurrence des queries. je doute que la conf par défaut suffise. genre max connecion, query cache, thread, etc...

    Merci pour vos info
    JP

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Le webservice est externe à l'entreprise ?

    Sa logique (le travail qu'il fait sur les données qui lui sont soumises) ne pourrait-il être fait en interne pour accélérer les choses ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 873
    Par défaut
    Salut bordi.

    Citation Envoyé par Bordi
    J'ai installé un mysql 5.6 avec la configuration par defaut sur un centos 7 et et windows 7.
    Pourquoi ne pas avoir installé la dernière version, la 5.7.20 ?

    Citation Envoyé par Bordi
    j'ai un script python qui lance plusieurs thread en parallèle avec pour chacun, l'exécution d'un select
    Votre idée est de paralléliser les accès à votre base de données. Pourquoi pas.
    Est-ce que ce sont que des extractions (select) ou faites-vous aussi des mises à jour ?

    J'espère qu'au moment où vous faites cela, plus personne n'intervient sur votre base de données.
    Car si une mise à jour se fait durant votre extraction, vous risquez d'avoir au final un résultat faux.

    Citation Envoyé par Bordi
    un select * from mytable limit start,nbrows pour paginer su la même table et gagner du temps.
    J'espère que vous gérez correctement votre couple (start , nbrows).
    Au départ start=0 et nbrows=10.000 Puis ensuite start=start+nbrows, sans changer la valeur de nbrows.
    Ce n'est que du détail, mais cela a son importance car vous pouvez avoir un chevauchement.

    Citation Envoyé par Bordi
    normalement il n'y a pas de croisement ou de chevauchement entre les select.
    Admettons que le cas ne se pose pas.

    Mais faites-vous à un moment donnée, une mise à jour dans la base de données, ce que vous avez extrait précédemment ?
    Si la réponse est non, vous n'avez pas de problème.

    Dans le cas contraire, vous risquez d'avoir un goulot d'étranglement lors de la gestion des transactions.
    En effet, selon le paramétrage que vous avez, vous pouvez bloquer au niveau de la ligne, de la page ou de la table.
    Ce qui signifie que durant la mise à jour d'une ligne, la page (par exemple) sera bloquée et donc un autre programme qui va accéder à cette page sera en attendte d'une libération de la ressource.

    Citation Envoyé par Bordi
    j'ai 5 workers qui tournent par tour avec une pagination de 10000 rows, ma table contient 210000 records et je mets 18 minutes pour traiter mon batch sur linux
    210.000 lignes pour 18 minutes de traitement. C'est trop long !

    Citation Envoyé par Bordi
    je dois préciser que j'interroge en asynchrone un web service pour chacune des lignes du select des 10000 lignes chargées.
    Par "web service", je suppose que c'est un autre serveur MySql. Ou se trouve-t-il ? Est-il distant (WAN) ou local (LAN), voire sur le même serveur mysql ?

    Citation Envoyé par Bordi
    je ne fais que des select sur la table et je produits un fichier résultat sous forme csv à la fin.
    Je ne comprends pas bien car vous dites car dans votre second message :
    Citation Envoyé par Bordi
    selon le résultat du service la transaction est ensuite marquée pour produire des statistiques (sucre d'orges, camenbert).
    Qu'est-ce que vous appelez transaction ?
    Quand je parle de transaction, je parle d'un mode d'accès à la table où le blocage de la ligne, de la page ou de la table dure le temps de la mise à jour.

    Comment faites-vous ce marquage ?
    Est-ce une mise à jour dans votre table ? Ou bien le résultat va se trouver dans votre fichier ".csv" ?

    Citation Envoyé par Bordi
    je stocke l'id transaction avec le resultat dans une map mémoire.
    Qu'est-ce que vous voulez dire par "map mémoire" ? Et qu'est-ce que cela vient faire dans votre traitement ?
    Je croyais que le résultat était stockée sous forme d'un fichier ".csv" ?
    Pour réaliser ce fichier ".csv", vous avez juste besoin d'une requête de mise en forme.

    Citation Envoyé par Bordi
    j'ai l'impression que je coince un peu du côté mysql en terme de latence.
    Est-ce une intuition ? En quoi l'extraction de vos lignes provoque ce blocage ?

    Citation Envoyé par Bordi
    mon serveur linux a 16GBRAM, quels sont les paramètres mysqld que vous me conseillerez de modifier pour améliorer la concurrence et la performance des queries.
    Il est difficile, sans faire des tests, de vous conseiller sur tel ou tel paramétrage.
    Le paramétrage dépend de la taille de votre RAM, mais aussi du nombre d'utilisateurs au maximum ainsi que du nombre de threads qui peuvent être traités en parallèle par utilisateur.
    Vous comprenez que ce n'est pas aussi facile que vous le croyez.

    Citation Envoyé par Bordi
    y-a-t'il un outil qui pourrait générer un fichier my.cnf pour mysqld selon la config machine.
    Non, ca n'existe pas. Mais il existe des outils permettant d'optimiser votre configuration.

    Je n'aime pas trop travailler dans le vide.
    Pouvez-vous nous donner les scripts de vos traitements ?
    Ainsi que le descriptif de votre table.
    Et le descriptif de votre fichier ".csv".

    @+

Discussions similaires

  1. Query Begin et Commit son sur un bateau....
    Par faoz75 dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/08/2003, 11h48
  2. Je ne retrouve pas ma SP dans Query analyser
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/07/2003, 12h43
  3. Query data set
    Par Sandra dans le forum JBuilder
    Réponses: 3
    Dernier message: 20/01/2003, 10h08
  4. [XMLRAD] Décoder Request.Query
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 8
    Dernier message: 10/01/2003, 16h40

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