Projet

Général

Profil

Development #34097

optimiser les requêtes sur les sessions

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
18 juin 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

À analyser les requêtes vers la db, beaucoup beaucoup de SELECT id, session_data FROM sessions, pour la mention sur les objets "verrouillés".

Comme ceux-ci sont de toute façon libérés après 30 minutes, on devrait pouvoir limiter la requête aux sessions qui ont été modifiées dans la demi-heure.


Fichiers

Révisions associées

Révision 73958864 (diff)
Ajouté par Frédéric Péters il y a presque 5 ans

misc: limit query to recent sessions when checking for locked objects (#34097)

Historique

#2

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

Pas de test additionnel mais à coup de pdb en local j'ai vérifié que jamais les tests de backoffice ne faisait un select() sans clause where.

#3

Mis à jour par Thomas Noël il y a presque 5 ans

A priori do_session_table va juste ajouter une colonne last_update_time avec des NULL dedans pour les sessions existantes... ça va pas marcher ensuite j'ai l'impression, le [GreaterOrEqual('last_update_time', ...

Aussi, il faut modifier get_sessions_with_visited_object dans sql.py pour ne prendre en compte que les session récentes.

(Enfin, j'ai l'impression que notre clean_session ne nettoie rien en mode SQL, c'est un autre sujet mais ça doit aussi être en rapport avec ce bogue de "trop de sessions")

#4

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

A priori do_session_table va juste ajouter une colonne last_update_time avec des NULL dedans pour les sessions existantes... ça va pas marcher ensuite j'ai l'impression, le [GreaterOrEqual('last_update_time', ...

Ça marchera assez rapidement le lendemain; je n'étais pas tellement motivé à taper now comme valeur par défaut mais je peux faire ça.

Aussi, il faut modifier get_sessions_with_visited_object dans sql.py pour ne prendre en compte que les session récentes.

Il y a déjà un WHERE qui fait que cette requête est limitée dans ce qu'elle retourne, mais oui.

(Enfin, j'ai l'impression que notre clean_session ne nettoie rien en mode SQL, c'est un autre sujet mais ça doit aussi être en rapport avec ce bogue de "trop de sessions")

Vu par ailleurs, mais ça fonctionne, il y a juste un empilage de couches d'abstractions, de quixote vers un fonctionnement type dictionnaire, vers notre storage.py vers notre sql.py.

#6

Mis à jour par Thomas Noël il y a presque 5 ans

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

Impeccable.

#7

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 73958864d1fa30677d3bc27498513d299e65e509
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Tue Jun 18 10:33:38 2019 +0200

    misc: limit query to recent sessions when checking for locked objects (#34097)
#8

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

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

Formats disponibles : Atom PDF