Partage
  • Partager sur Facebook
  • Partager sur Twitter

max_user_connections

    21 janvier 2021 à 15:17:59

    Bonjour tous le monde,

    Je viens de découvrir les limite de connexion mysql et l'alerte : max_user_connections.

    LWS mon hébergeur m'apprend que j'ai le droit à 20 connections.

    J'ai beau essayé de comprendre ca n'est toujours pas clair.

    J'ai cru comprendre que c'est limite autorisé, dans mon cas 20 utilisateurs à utiliser Mysql. Mais on me dit également que c'est la limite du nombre de connexions maximum effectué par mes script PHP sur la base de donnée!

    Donc ca veut dire que je ne pourrais jamais avoir plus de 20 utilisateurs différents sur mon site ou que je dois optimiser mes scripts?

    Quel est concrètement cette "user"?

    Merci.

    • Partager sur Facebook
    • Partager sur Twitter
      21 janvier 2021 à 17:52:15

      Bonjour,

      La doc MySQL dit:

      The maximum number of simultaneous connections permitted to any given MySQL user account

      On parle donc ici de connexions simultanées avec le même compte utilisateur MySQL.

      Si ton code PHP se connecte à MySQL (via PDO par exemple) il utilise les identifiants d'un utilisateur MySQL (identifiant et mot de passe), et le plus souvent cet utilisateur est unique pour tout ton code.

      Lorsqu'un visiteur accède à ton site web, il exécute ton code PHP et ouvre une connection à MySQL, jusqu'à ce que celle-ci soit refermée lorsque le code PHP est terminé (une fois que tout le script a été parcouru et exécuté).

      Donc imaginons que ton code PHP mette 0.03 seconde à s'exécuter. Si en 0.03 seconde tu as plus de 20 personnes qui accèdent à ton site web, la 21ème aura une erreur max_user_connections.

      Sur un site à très faible trafic ce n'est pas important je pense, mais si tu as disons une centaine de visiteurs simultanés, tu auras le problème systématiquement aux heures de pointe ... et un serveur mutualisé de LWS ne sera plus suffisant, il faudra envisager de prendre un VPS ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        22 janvier 2021 à 19:15:38

        Merci Benzouye!

        Comme ça c'est claire. C'est mieux que ce que je pensais déjà.

        Du coup est t'il utile, ou pertinent, de créer une connexion différente avec un autre utilisateur Mysql dans certaines pages pour diviser la probabilité que 20 personnes utilise la même connexion SQL en même temps?

        Car j'ai plus de petit scripts court qui que de long. Un Mysql_user pour les cours mais nombreux et un pour les long moins fréquent

        Ca ne pose pas de problèmes technique ou de performance si deux connexion utilisateurs Mysql travaillent sur la même BDD?

        -
        Edité par matthmauc 22 janvier 2021 à 19:20:05

        • Partager sur Facebook
        • Partager sur Twitter
          22 janvier 2021 à 23:31:06

          Il faut commencer par regarder si ton hébergeur te laisse la possibilité de créer plusieurs utilisateurs MySQL ... ce qui n'est pas vraiment sûr...

          Ensuite, si tu ne peux pas faire changer la valeur de max_user_connections, tu peux en effet imaginer utiliser différent utilisateurs. Le plus simple c'est de créer plusieurs utilisateurs MySQL, et d'en choisir un aléatoirement au moment où ton script PHP ouvre la connexion...

          Cela dit si tu en es là, c'est que tu as du trafic, et ça peut aussi valoir le coup de passer à une offre supérieure ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            25 janvier 2021 à 18:34:42

            Oui j'ai le droit à plusieurs utilisateurs MySQL et non je ne peux pas modifier le max_user_connections.

            Je ne pense pas que être encore au moment ou j'ai "trop" de trafic mais je préfères avoir un peu de sécu en attendant le moment ou je devrais prendre une offre supérieur.

            Si tu me dis que ca ne pose pas de problème niveau performance ca me semble être une bonne solution.

            Merci

            • Partager sur Facebook
            • Partager sur Twitter
              23 février 2021 à 9:16:41

              Me revoilà!

              J'ai eu de nouveau le problème hier.

              J'ai inséré dans mon try/catch de connexion à la Bdd l'envoi d'un mail en cas d'erreurs pour être au courant de se qu'il se passe sur le serveur.

              Hier j'ai reçu ce message : 

              "SQLSTATE[HY000] [1040] Too many connections"

              Je suis allé regarder dans mon historique de connexion et il n'y avait que deux utilisateurs connectés à ce moment là.

              Donc je ne comprend pas pourquoi je reçois cette erreur car si j'ai bien compris même si mes scripts s'exécutent en 1min je ne devrait pas recevoir ce message si seulement deux utilisateurs sont connectés? 

              Pour info:

              Chargement de pages en local: max 0.020sec 

              Temps d'exécution des scripts en local: max 0.077sec

              Je me pose la question également si le problème ne viendrait pas de mysql lwspanel, car il me semble que c'est au moment où j'ai regardé directement dans la base de donnée via le panel que l'erreur s'est déclenché.

              Vous en pensez quoi?

              Je précise que j'ai toujours un seul et unique utilisateur MySQL pour tout mes scripts. 

              -
              Edité par matthmauc 23 février 2021 à 10:25:47

              • Partager sur Facebook
              • Partager sur Twitter
                23 février 2021 à 13:46:00

                https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_connections

                Là encore il faut voir ce que permet le serveur mutualisé ...

                • Partager sur Facebook
                • Partager sur Twitter
                Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                  28 février 2021 à 11:59:08

                  Malheureusement je ne peux pas modifier la variable serveur!

                  Dans ma formule il est mentionner Connexions simultanées max : 35

                  Je ne comprend pas comment je peux attendre ce nombre avec deux utilisateurs sur le site!

                  Tu me confirmes bien que ce nombre est fonction du nombre de connexions de l'utilisateur MySQL (soit 1 pour une page généré et non pour chaque requête SQL ??)

                  En gros même si j'ai 36 requête à exécuter dans mon script ca compte pour une connexion MySQL?

                  Est ce qu'une partie du problème viendrait du faite que je ne ferme pas les connexion et requête? (il me semble qu'elle se ferme à la fin du script comme dit plus haut)

                  Ou que je n'utilise pas de connexion persistantes?

                  PDO::ATTR_PERSISTENT => true

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 février 2021 à 15:25:23

                    As-tu bien ne connexion unique pour tout ton programme, un seul "new PDO(...)" ?

                    As-tu bien un seul utilisateur MySQL ?

                    -
                    Edité par Benzouye 28 février 2021 à 15:26:24

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                      28 février 2021 à 19:32:47

                      Oui j'en ai un seul que j'include dans tout mes script

                      $option = 

                      [

                      PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',

                      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,

                      PDO::ATTR_EMULATE_PREPARES => false

                      ];

                      $bdd = new PDO('mysql:host=localhost;dbname=plateforme;', 'root', 'root', $option);

                      voila ce que me dit leurs service technique:

                      Le souci rencontré n'a pas de rapport avec le nombre d'utilisateurs connecté, il s'agit des requêtes de connexion effectués par votre site sur la base de donnée, je vous invite à vérifier si vos connexions à la base de donnée son bien fermés après chaque requête dans vos scripts PHP.

                      on est d'accord qu'en faisant ce qu'il propose ca augmente le problème en augmentant le nbr de connexion!!

                      Sans parler des performances...

                      -
                      Edité par matthmauc 28 février 2021 à 20:03:12

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 février 2021 à 23:27:48

                        Non, ils te demandent de vérifier que tu fermes bien ta connexion à la fin de ton script, pour t'assurer qu'elle ne reste pas ouverte après la fin de l'exécution...

                        Mais ça me paraît bizarre, car il me semble que les connexions sont terminées tacitement à la fin d'un script ...

                        Au pire essaye de rajouter un $bdd = null à la toute fin de ton script ... mais je suis sceptique...

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

                        max_user_connections

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown