Projet

Général

Profil

Actions

Anomalie #16925

ouvert

[PDO] les requêtes préparées ne sont pas libérées

Ajouté par Quentin RIBAC il y a plus de 3 ans. Mis à jour il y a plus d'un an.

Statut:
Résolu
Priorité:
2-Sérieux
Assigné à:
-
Version cible:
Début:
23/04/2021
Echéance:

Description

Maarch Courrier 20.10.10

Pour mon problème de script qui prenait toute la RAM, j’ai avancé. Voir l’image jointe pour se rendre compte de la gravité du problème, toute la mémoire vive et le swap sont occupés, soit plus de 20Go.

Ce sont des process postgres qui prennent la mémoire, pas php. En coupant mon script PHP la mémoire n’est pas libérée, ni en redémarrant PostgreSQL, mais en faisant un restart d’apache ça libère la mémoire. Donc pour moi le problème vient de Courrier. J’ai été voir dans les sources qui gèrent le PDO et j’ai fait cette petite modification :

diff --git a/src/core/models/DatabasePDO.php b/src/core/models/DatabasePDO.php
index 7328049bc5..08deb5b045 100755
--- a/src/core/models/DatabasePDO.php
+++ b/src/core/models/DatabasePDO.php
@@ -20,6 +20,10 @@ class DatabasePDO
     private static $type            = null;
     private static $preparedQueries = [];
 
+	public function __destruct() {
+		self::$preparedQueries = [];
+	}
+
     public function __construct(array $args = [])
     {
         if (!empty(self::$pdo)) {

et ça semble fonctionner.

J’ai testé en mettant self::reset(); dans le destructeur mais la recherche ne fonctionnait alors plus vu qu’il y a apparemment des tables temporaires dans la connexion.

Cette solution intermédiaire de détruire les requêtes préparées semble améliorer grandement l’utilisation de la mémoire, peut-être au détriment de la vitesse d’exécution, mais pas d’une façon que j’ai pu ressentir en tant qu’utilisateur.

Pouvez-vous valider que cette modification n’aura pas d’impact fonctionnel bloquant pour les utilisateurs, hormis un léger ralentissement ?
La modification ne serait à appliquer que le temps d’exécution d’un script de reprise de données à usage unique.


Fichiers

ram99pct.png (166 ko) ram99pct.png Quentin RIBAC, 23/04/2021 11:03
Actions

Formats disponibles : Atom PDF