Projet

Général

Profil

Development #54242

chargement de tous les formdata lors de l'enregistrement d'un workflow

Ajouté par Frédéric Péters il y a presque 3 ans. Mis à jour il y a presque 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
24 mai 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Vu sur une manipulation d'un workflow, je fais workflow.store() et ça prend des tonnes de temps et je vois la mémoire totalement chargée.

À inspecter un peu c'est lors de rebuild_security, je me dis qu'y faire

     @classmethod
     def rebuild_security(cls):
-        formdatas = cls.select(order_by='id')
+        formdatas = cls.select_iterator(order_by='id')
         conn, cur = get_connection_and_cursor()
         for formdata in formdatas:

aiderait.

Mais non, toute la conso se fait déjà sur :

        conn, cur = get_connection_and_cursor()
        cur.execute(sql_statement, parameters)

Fichiers

Révisions associées

Révision 374a2824 (diff)
Ajouté par Frédéric Péters il y a presque 3 ans

sql: remove legacy postgresql version check (#54242)

Révision 471c4a32 (diff)
Ajouté par Frédéric Péters il y a presque 3 ans

sql: use a server cursor to iterate over rows (#54242)

Historique

#3

Mis à jour par Frédéric Péters il y a presque 3 ans

Utilisation d'un curseur côté serveur.

#4

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Statut changé de Solution proposée à En cours

(il y a à vérifier davantage, à tester il y a des "named cursor isn't valid anymore" qui apparaissent).

#5

Mis à jour par Frédéric Péters il y a presque 3 ans

Voilà, bonne chose les tests échouaient aussi; cette version utilise un curseur côté serveur pour tout sauf l'itération sur la vue wcs_all_forms.

#6

Mis à jour par Nicolas Roche il y a presque 3 ans

  • Statut changé de Solution proposée à Solution validée

Relu.
(si j'ai bien compris, on utilise un curseur côté serveur pour fragmenter les données envoyées au client, et plus particulièrement on utilise un curseur nommés pour pouvoir itérer dessus.)
https://www.psycopg.org/docs/usage.html#server-side-cursors

Je me demande juste si c'est voulu ou non d'avoir inversé l'ordre commit puis close (comme c'est fait ailleurs).

#7

Mis à jour par Frédéric Péters il y a presque 3 ans

Je me demande juste si c'est voulu ou non d'avoir inversé l'ordre commit puis close (comme c'est fait ailleurs).

Oui les curseurs sont invalidés au commit sur la connexion. (ça pourrait sans doute être inversé partout sans conséquence).

#8

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 471c4a32dc47db66b3cb81e325eef1cc14a06da7
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon May 24 22:04:32 2021 +0200

    sql: use a server cursor to iterate over rows (#54242)

commit 374a282488889d63f7d05fe3bc7295d8dff2083e
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Tue May 25 08:15:33 2021 +0200

    sql: remove legacy postgresql version check (#54242)
#9

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF