Hébergement Web-old - Le problème du 'max_user_connections'
... / Le problème du 'max_user_...
BMPCreated with Sketch.BMPZIPCreated with Sketch.ZIPXLSCreated with Sketch.XLSTXTCreated with Sketch.TXTPPTCreated with Sketch.PPTPNGCreated with Sketch.PNGPDFCreated with Sketch.PDFJPGCreated with Sketch.JPGGIFCreated with Sketch.GIFDOCCreated with Sketch.DOC Error Created with Sketch.
Frage

Le problème du 'max_user_connections'

Von
SergeR6
Erstellungsdatum 2024-10-23 07:58:10 (edited on 2024-11-18 11:06:18) in Hébergement Web-old

Reprise du message précédent :


Bonjour,


Comment savoir si cela peut venir de là et pas des problèmes de connexions pas assez régulièrement fermées ?

Le meilleur moyen pour le moment est déjà d'optimiser le code (et peut être aussi la BDD avec des index il ou il faut), puis voir dans les graphiques OVH si cela améliore les temps.

Je ne sais pas comment est fait votre code mais la j'utiliserai une fonction pour gérer la partie SQL.

Note : je vous conseillerais de faire un nouveau post avec un récapitulatif car là on dépasse la simple migration en MySQL8 qui étais le but de ce topic.

Cordialement, janus57


Je n’ai pas encore bien compris cette histoire d’index. Désolé pour mon amateurisme, je suis un codeur du dimanche mais je vais me pencher dessus et voir de quoi il s’agit.
Merci de votre patience en tout cas.


2 Antworten ( Latest reply on 2024-11-18 11:06:28 Von
SergeR6
)

Bonjour,

Pour les index :


80% des indexes sont extrêmement faciles à créer.
20% peuvent être un enfer et nécessiter énormément d'expérience.

https://use-the-index-luke.com est une excellente référence, mais il adresse surtout le 20% compliqué.

Pour gérer le 80% des indexes classiques, j'irais directement sur la Doc MySQL:
* Indexes sur 1 colonne
* Indexes sur plusieurs colonnes

Je vous la fait en mode très simplifiée pour des cas très simples…

Imaginons cette table:

mysql> create table tbl1 (id int, col1 varchar(255), col2 int);

Et cette requête:

select * from tbl1 where col1='hello';

explain va m'aider à voir si j'ai les bons index pour traiter cette requête:

mysql> explain select * from tbl1 where col1='hello';
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | tbl1 | NULL | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+

possible_keys, ce sont les index éligibles pour traiter ma demande. On voit qu'il n'y en a pas.

key, c'est l'index qui a été choisi parmis les index éligibles. Ce choix va dépendre des index, mais également de ce qu'il y a dans la table.

Comme dans ma requête j'ai une condition sur une colonne, alors je peux me contenter de créer un index sur cette colonne:

mysql> create index tbl1_idx1 on tbl1(col1);

mysql> explain select * from tbl1 where col1='hello';
+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+
| 1 | SIMPLE | tbl1 | NULL | ref | tbl1_idx1 | tbl1_idx1 | 1023 | const | 1 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+

Si j'avais une condition sur plusieurs colonnes…

mysql> select * from tbl1 where col1='hello' and col2=42;

Alors il me faudrait un index sur plusieurs colonnes:

mysql> create index tbl1_idx2 on tbl1(col1, col2);

mysql> explain select * from tbl1 where col2=42 and col1='hello';
+----+-------------+-------+------------+------+---------------------+-----------+---------+-------------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------------+-----------+---------+-------------+------+----------+-------+
| 1 | SIMPLE | tbl1 | NULL | ref | tbl1_idx1,tbl1_idx2 | tbl1_idx2 | 1028 | const,const | 1 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------------+-----------+---------+-------------+------+----------+-------+

Ici, on voit que le premier index (celui sur une colonne) aurait pu servir partiellement à traiter ma requête (il aurait servi au premier filtre sur col1, puis il aurait fallu filtrer sans index sur col2). Mais il n'a pas été sélectionné (key à tbl1_idx2) parceque le 2ème index est plus adapté.

En espérant que ça aide 🙂


Cordialement, janus57

Si je comprends bien, c'est une sorte de "filtre d'erreur de parcours de table"
Ça sert à filtrer une requête et à la rejeter avant qu'elle ne parcourt la table inutilement pour renvoyer des résultats au cas où les demandes de celle-ci n'auraient rien à voir avec le contenu de la table ou ce qu'elle est censée y demander ?