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

Administration MySQL Discussion :

[MySql 4.1] Problème de perf


Sujet :

Administration MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1
    Par défaut [MySql 4.1] Problème de perf
    Bonjour,
    Je rencontre des problèmes de performance avec un serveur MySql 4.1 sous Windows 2008R2 Sous VMware.
    Le serveur possède 2 vcpu et 8 Go de mémoire vive.
    Ma BDD possède 29 tables toutes en MyISAM. (impossible de changer pour innodb
    Parmis c'est tables, j'en ai 4 avec un nombre supérieur à 1000000 de lignes ( 2 mois d'enregistrements) et une table avec 18532133 lignes...
    Mon problème étant que j'ai énormément de Table_Locks_Waited (ratio de 1:8 ) et le mysql qui prend entre 50 à 70% de processeur, mais il n'utilise que 314Mo de mémoire et 78 threads connectés.
    Je suis donc obliger de baisser le nombre de threads simultanée pour avoir une BDD stable.
    Le problème étant que j'ai besoin d'environ 1500 à 1800 Threads simultanée. ( max_connections = 1800 )
    Aujourd'hui, je suis obligé de me limiter à 400 threads pour ne pas exploser...

    Je n'ai plus de piste à exploiter...
    Merci d'avance pour l'aide que vous pourrez m'apporter.

    Cordialement,

  2. #2
    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 887
    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 887
    Par défaut
    Salut galack59.

    Je pense que ce n'est pas dans ce forum que tu trouveras une personne compétente pour l'aspect système de ton SGBDR MySql.
    Qui plus est, sur des questions de performances systèmes et non de requêtes.

    La première idée qui me vient à l'esprit serait de basculer vers MySql 5.7 qui est plus performant que les autres versions.
    Enfin, c'est ce que l'on annonce pour cette nouvelle version !

    Citation Envoyé par galack59
    le mysql qui prend entre 50 à 70% de processeur, mais il n'utilise que 314Mo de mémoire et 78 threads connectés.
    Je suis donc obliger de baisser le nombre de threads simultanée pour avoir une BDD stable.
    Qu'est-ce que tu entends par une BDD stable ?

    Citation Envoyé par galack59
    Le problème étant que j'ai besoin d'environ 1500 à 1800 Threads simultanée. ( max_connections = 1800 )
    Aujourd'hui, je suis obligé de me limiter à 400 threads pour ne pas exploser...
    Qu'est-ce que tu entends par exploser ?

    La seconde idée est que ta machine est sous dimensionné pour ce que tu veux faire. Il faudrait envisager détendre ta RAM à 64 Go au moins.

    Je fais une simple multiplication : 314 Mo par thread X 78 Threads connectés = 24492 Mo soit 24,492 Go.
    Et tu as, au maximum, seulement que 8 Go de RAM. Je comprends que tu as beaucoup d'attentes.

    Si tu as 8 Go de Ram et qu'un thread prend 314 Mo, le nombre max de threads est de 8192 Mo / 314 Mo = 26 Threads environ.
    Donc il faut réduire en dessous de ce nombre de threads pour avoir moins de blocages.

    L'autre solution est d'augmenter la RAM.
    Admettons que tu as besoin de 1800 threads simultanés, il te faut alors 1800 * 314 Mo = 565 200 Mo, soit 552 Go.
    Là, c'est un peut beaucoup. Je ne sais même pas combien on peut mettre, au max, de RAM dans un ordinateur.

    @+

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 610
    Billets dans le blog
    10
    Par défaut
    - Pourquoi utilisez vous une version MySQL aussi ancienne ?
    - Avez vous identifié les requêtes les plus coûteuses ?
    - Avez vous analysé la taille des tables, les tables obèses peuvent être à l'origine de bien des maux
    - Avez vous analysé les index inutiles et ceux qui ont un très grand nombre de colonnes, qui sont donc couteux en maintenance de chemin d'accès
    - Avez vous analysé les niveaux de verrouillage et la taille des verrous
    - Avez vous analysé les requêtes qui transportent des colonnes inutiles (redondantes, select *)
    - Avez vous analysé les tris, groupage, distinct inutiles, les union sans ALL
    - Avez vous exploré la piste du partitionnement pour vos tables les plus volumineuses
    - Avez vous identifié les index manquants et les requetes non sargables
    - Attention aussi au SQL dynamique, dont les chemins d'accès ne sont pas maitrisés

  4. #4
    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 887
    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 887
    Par défaut
    Salut Escartefigue.

    Tes remarques sont pertinentes, mais le problème est que sa configuration est sous dimensionnée par rapport aux connexions.
    De ce fait, en simultané, il ne peut pas avoir plus de 26 threads, soit 26 connexions, donc 26 utilisateurs qui interrogent sa base.

    Il doit soit réduire le temps nécessaire à l'exécution des requêtes qui prennent trop de temps, soit augmenter la RAM.
    Mais si le nombre d'accès augmente, augmenter la RAM n'est pas non plus une solution.
    Il faut trouver le juste milieu entre le temps nécessaire à l'exécution de sa requête et le nombre simultané d'utilisateurs.

    Il y a aussi le problème des connexions persistantes : http://php.net/manual/fr/features.pe...onnections.php

    @+

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    Augmentez la RAM et les CPU.... Il y a longtemps on donnait un ratio de max 500 connexion par CPU physique (pas des cœurs). Bref avec les processeurs actuels nous devrions être à l'aise 4 CPU physique à 4 cœurs, soit 16 cœurs et en VM 16 + 2 (pour la gestion de la couche de virtualisation...)=> 18 vCPU dédiés à MySQL....

    On est loin du compte avec 2 !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre éprouvé
    Homme Profil pro
    Analyste-programmeur
    Inscrit en
    Décembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 52
    Par défaut
    Citation Envoyé par galack59 Voir le message
    Bonjour,
    Je rencontre des problèmes de performance avec un serveur MySql 4.1 sous Windows 2008R2 Sous VMware.
    Le serveur possède 2 vcpu et 8 Go de mémoire vive.
    Ma BDD possède 29 tables toutes en MyISAM. (impossible de changer pour innodb
    Parmis c'est tables, j'en ai 4 avec un nombre supérieur à 1000000 de lignes ( 2 mois d'enregistrements) et une table avec 18532133 lignes...
    Mon problème étant que j'ai énormément de Table_Locks_Waited (ratio de 1:8 ) et le mysql qui prend entre 50 à 70% de processeur, mais il n'utilise que 314Mo de mémoire et 78 threads connectés.
    Je suis donc obliger de baisser le nombre de threads simultanée pour avoir une BDD stable.
    Le problème étant que j'ai besoin d'environ 1500 à 1800 Threads simultanée. ( max_connections = 1800 )
    Aujourd'hui, je suis obligé de me limiter à 400 threads pour ne pas exploser...

    Je n'ai plus de piste à exploiter...
    Merci d'avance pour l'aide que vous pourrez m'apporter.

    Cordialement,
    Êtes-vous en train de dire qu'à certains moments vous avez 1800 *usagers* connectés simultanément à votre serveur MySQL ???

  7. #7
    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 887
    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 887
    Par défaut
    Salut bstjean.

    Le problème est moins un nombre élevé de thread qui vont s'exécuter en parallèle, mais plus dans le choix du mode transactionnel qui a été retenu.
    Si le mode est "transaction-isolation = SERIALIZABLE", vous êtes dans ce que l'on nomme un mutex (mutual exclusive).
    Autrement dit, même si des threads vont s'exécuter en parallèle, l'intervention sur une table va automatiquement se faire d'une manière exclusive.
    D'où le qualificatif de "SERIALIZABLE" qui va se traduire par un et un seul intervenant sur la table.

    Il y a un indice qui prouve que le choix du mode transactionnel est erroné . Votre CPU n'atteint pas les 100%.
    Il y a sous exploitation de la CPU mais pire, vous passez votre temps à attendre, et ce à cause du mutex.

    Résoudre ce problème est fort complexe, car cela concerne aussi bien l'aspect matériel avec l'augmentation de la RAM mais aussi logiciel en cherchant la cause des blocages.

    @+

  8. #8
    Membre éprouvé
    Homme Profil pro
    Analyste-programmeur
    Inscrit en
    Décembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 52
    Par défaut
    1) il est en MyISAM donc le problème du "isolation level" est à écarter
    2) s'il avait un problème de "lock escalation", il rencontrerait une tonne de "lock timeouts"
    3) on peut avoir un CPU à 20% et quand même être en "lock wait"

Discussions similaires

  1. Problème de perfs sur MySQL
    Par Daily dans le forum Outils
    Réponses: 11
    Dernier message: 12/09/2007, 17h11
  2. [MySQL] Requetes imbriquées, problème de groupage
    Par cdelamarre dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2006, 21h16
  3. [mysql] Toujours ce problème d'index !!
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 8
    Dernier message: 12/10/2005, 17h05
  4. problèmes de perfs IE6/Firefox
    Par fredoche dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 26/08/2005, 17h44
  5. Problème de perfs Sous requetes IN
    Par ias83 dans le forum SQL
    Réponses: 4
    Dernier message: 15/06/2005, 12h39

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