Problème de nombre de requêtes sur la base

Bonjour

Après une mise à jour d’un site de SPIP 3.2 à 4.0, 4.1, 4.2 et 4.3, j’ai un problème de nombre de requêtes sur la base.
Pour info, j’ai vérifié et mis tous les plugins à jour avant chaque étape.

Le problème semble venir des pages où j’affiche des réponses à un formulaire formidable.
Il y a environ 2000 réponses, mais les requêtes sont relancées lors du recalcul de la page, sinon c’est en cache non ?

Avant de reprendre tout le code est-ce que ces extraits de logs avec les erreurs peuvent m’orienter ?

Merci de votre aide.

2025-09-30 08:47:02 95.160.34.245 (pid 111327) :Pub:ERREUR: Erreur d’exécution monSite/page_listing.html | File […]/plugins/auto/saisies/v5.16.2/inc/saisies_lister.php Line 485 : Cannot unset string offsets
2025-09-30 10:53:21 2a01:cb08:8949:9a01:59af:c355:47e:98a5 (pid 76690) :Pri:!INFO: Probleme de configuration opcache.revalidate_freq 2s : on attend 0s

2025-09-30 08:12:34 2001:ee0:4f34:92a9:c5b0:84c6:f43e:30a6 (pid 11938) :Pub:ERREUR: Erreur 1226 de mysql: User 'maBase' has exceeded the 'max_questions' resource (current value: 40000)
in monSite/ecrire/public/quete.php L81 [sql_fetsel(),quete_parent_lang(),quete_rubrique_fond(),public_styliser_dist(),public_parametrer_dist(),public_produire_page_dist(),assembler(),include()]
SELECT id_parent, lang
FROM `maBase`.spip_rubriques
WHERE id_rubrique=43
2025-09-30 08:12:34 2001:ee0:4f34:92a9:c5b0:84c6:f43e:30a6 (pid 11938) :Pub:ERREUR: Erreur mysql 1226
2025-09-30 08:12:34 2001:ee0:4f34:92a9:c5b0:84c6:f43e:30a6 (pid 11938) :Pub:ERREUR: <b>Erreur SQL 1226</b><br><tt>
User 'maBase' has exceeded the 'max_questions' resource (current value: 40000)
<br><span style='color: red'><b>
SELECT id_parent, lang
FROM spip_rubriques
WHERE id_rubrique=43</b></span></tt><br> Squelette monSite/ecrire/public/quete.php Boucle quete_parent_lang(){
sql_fetsel();
} L81

2025-09-30 08:12:34 2001:ee0:4f34:92a9:c5b0:84c6:f43e:30a6 (pid 11938) :Pub:ERREUR: Erreur 1226 de mysql: User 'maBase' has exceeded the 'max_questions' resource (current value: 40000)
in monSite/ecrire/public/composer.php L1006 [sql_select(),executer_calculer_select(),select(),__construct(),create(),BOUCLE_les_secteurs_langueshtml_7a4b8229a40f73904d1c824b4fff3147(),html_7a4b8229a40f73904d1c824b4fff3147(),public_parametrer_dist(),public_produire_page_dist(),inclure_page(),evaluer_fond(),recuperer_fond(),html_5459bfa09ee83dd241d35ca52ed81c4a(),public_parametrer_dist(),public_produire_page_dist(),inclure_page(),evaluer_fond(),recuperer_fond(),eval(),include(),evaluer_fond(),recuperer_fond(),eval(),include(),evaluer_fond(),recuperer_fond(),eval(),include(),include()]

Oui c’est censé être en cache. Mais 2000 réponses, ca fait grosse modo 2000 * 2 requetes. Ca peut faire beaucoup. Il faudrait a minima paginer je pense.

Merci Maïeul

Ok.

Comme indiqué dans la doc Formidable, j’ai changé :

#SAISIES|unserialize

par

#SAISIES|formidable_deserialize

J’ai aussi ces 2 logs.
Il y a un problème avec AJAX, ou le plugin Saisies ?

2025-09-30 08:47:02 95.160.34.245 (pid 111327) :Pub:ERREUR: Erreur d’exécution monSite/page_listing.html | File […]/plugins/auto/saisies/v5.16.2/inc/saisies_lister.php Line 485 : Cannot unset string offsets

2025-09-30 11:08:07 2a01:cb08:8949:9a01:59af:c355:47e:98a5 (pid 128971) :Pri:WARNING: Contextes AJAX forces en fichiers ! Cela arrive lorsque la valeur du contexte depasse la longueur maximale autorisee (2000). Ici : 2260.

Faudrait que j’ai le code complet + le formulaire formidable pour savoir plus…

Je comprends. Dans un premier temps, je remets tout à plat.

Il faut donc paginer dès la première boucle sur les réponses ?
Sachant que je passais le tableau des réponses dans des Inclures en AJAX en fonction de variables présentes ou non dans l’URL, du genre :

      [(#REM)<!-- Réponses à venir -->]
      [(#ENV{reponse}|!={archive}|oui|et{#GET{vdate}|>={#ENV{date}}|oui})
        #SET{monTableau,#GET{monTableau}|push{#ID_FORMULAIRES_REPONSE}}
      ]
      [(#REM)<!-- Réponses passées -->]
      [(#REM)<!-- #ENV{archive} OUI ET vdate inferieur #ENV{date} -->]
      [(#ENV{reponse}|=={archive}|oui|et{#GET{vdate}|>={#ENV{date}|non}})
        #SET{monTableau, #GET{monTableau}|push{#ID_FORMULAIRES_REPONSE}}
      ]

Comment pourrais-je faire la même chose avec des variables sans Inclure avec une boucle du genre :

<BOUCLE_formulaire(FORMULAIRES){id_formulaire=3}>#TOTAL_BOUCLE
  <B_reponse>
    [<p>Il y a au total (#GRAND_TOTAL) résultats</p>]
  <BOUCLE_reponse(FORMULAIRES_REPONSES){id_formulaire}{!par date}{pagination 10}>
    <h4>[Réponse N° (#ID_FORMULAIRES_REPONSE)][  - (#MAJ|affdate)]</h4>
    [<p>(#VOIR_REPONSE{input_1, valeur_uniquement}|textebrut)</p>]
  </BOUCLE_reponse>
</BOUCLE_formulaire>

Je ne comprend pas le besoin, ni du coup la question…

Le besoin c’est de pouvoir afficher un listing de réponses (en nombre important) en pagination, pour ne pas avoir trop de requêtes.
Et de pouvoir les filtrer en fonction de variables et/ou de valeurs.

Par exemple :

  • en fonction d’une variable dans l’URL, n’afficher que les archives (trier une valeur date)
  • ou lister les réponses en fonction d’une valeur (par exemple les valeurs d’une liste déroulante)
    Je cherche la meilleure méthode.