[RESOLU] Connexion PHP MySQL non fermée mais abandonnées

Petit nouveau ! | 5 Messages

21 sept. 2022, 16:00

Bonjour

J'utilise PDO pour de gros accès à mon serveur MySQL (environ 600 reuqêtes/ heures).PHP et MySQL tournent sur le même serveur

Le problème est que j'obtiens des montées en charges de mémoire au fil du temps liés apparemment a des connexions non fermée de MySQL : pour environ 12000 connexions, j'en ai 9960 abandonnées soit environ 80%

J'ai essayé de mettre ma connexion en persistant :
$conn = new PDO("mysql:host=$servername;dbname=$dbName", $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::ATTR_PERSISTENT => true));
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
mais toujours autant d'abandon de connexions.

Je ferme bien mes curseurs après chaque requête SQL.

Je ne comprends pas ce que j'ai oublié.

Comment fermez vous vos accès à la bdd ou bien comment la conservez-vous pendant plusieurs accès (les accès peuvent venir de plusieurs appareils en même temps) ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9435 Messages

21 sept. 2022, 18:58

PHP ferme automatiquement les connexions à MySQL à la fin de l'exécution de chaque script, donc à moins d'un cas particulier le comportement que tu observes n'est pas normal.
https://www.php.net/manual/fr/pdo.connections.php

Par ailleurs, 600 requêtes/heure ce n'est pas une grosse utilisation, c'est même plutôt très faible. Bien sûr tout dépend des ressources de ton serveur et des requêtes éffectuées et optimisations de tes tables mais en nombre 10 requêtes/min c'est rien du tout.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 5 Messages

22 sept. 2022, 09:11

Je me retrouve avec environ 100 connexions simultanées, le seul accèss à MySQL se fait en local via le serveur PHP.

Est-ce qu'il y a un paramètre particulier dans PDO ou PHP .INI qui pourrait faire que les connexions ne se ferment pas tout de suite?

Ou sinon, est-ce qu'il y a une autre méthode que PDO que je pourrais tester?

Petit nouveau ! | 5 Messages

22 sept. 2022, 09:15

J'ai oublié de préciser que j'utilise PHP 7.4.3 et MySQL 8

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9435 Messages

22 sept. 2022, 16:01

Tu peux forcer la fermeture en faisant comme l'exemple #3 de la doc :
https://www.php.net/manual/fr/pdo.connections.php

A ma connaissance il n'y a pas de paramètres qui permettraient de garder ouvertes les connexions, c'est bizarre...
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 5 Messages

22 sept. 2022, 16:13

J'avais déjà essayé, ca ne fonctionne pas

Je fait des tests avec mysqli, pour le moment tous mes tests ont l'air de bien clôturer la connexion.

Je vais basculer une partie du site en utilisant des identifiants différents pour voir si ca fonctionne bien

Petit nouveau ! | 5 Messages

23 sept. 2022, 17:28

Le problème venait bien de PDO, avec Mysqli la déconnexion se fait plus proprement

En une journée, j'ai seulement 52 abandons soit moins de 0,01% des connexions contre 80% avant

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9435 Messages

23 sept. 2022, 18:57

Intéressant d'avoir eu ton retour, car c'est un cas que je ne connaissais pas, merci ! :-D
Quand tout le reste a échoué, lisez le mode d'emploi...