Project

General

Profile

Development #95013

Performances: les appels /api/statistics/cards/count sont beaucoup trop lents

Added by Pierre Ducroquet 30 days ago. Updated 20 days ago.

Status:
Solution déployée
Priority:
Normal
Target version:
-
Start date:
06 September 2024
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

Description

J'observe sur nimes de nombreux appels à /api/statistics/cards/count.

Exemple ce matin à 9H22:

5.196.106.224 - - [06/Sep/2024:09:22:09 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A21%3A55Z&nonce=db62b7774914f1f0d281d378ec86ff51&signature=v%2BqLvMUP7xXjw4dpzeUMllG1iTdoxENRF171N%2B1Fmhk%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [13.307 s]
5.196.106.224 - - [06/Sep/2024:09:22:09 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A21%3A55Z&nonce=21f4fa0f336049e4bb5d762cdc62b67b&signature=oKjOT8J%2B1DQ%2BWMBxVlPOvfBHcO1zwlXUIa%2BFdOHemKM%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [13.374 s]
5.196.106.224 - - [06/Sep/2024:09:22:09 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A21%3A55Z&nonce=8af44b21edddcbdd1ef409c92fdd4a75&signature=OGTcIDSc106XUp/34Pd4DD3ToYVauu6YMOUBRV1459A%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [13.975 s]
5.196.106.224 - - [06/Sep/2024:09:22:10 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&filter-actif=true&filter-status=_all&time_interval=year&algo=sha256&timestamp=2024-09-06T07%3A21%3A55Z&nonce=40202770b9bb9ee0a7fdd7452a812f07&signature=Xxn9l0DPgivtFiBhN48lPwc41az5g4k1yidi%2BHvYVFI%3D HTTP/1.1" 200 1228476 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [14.763 s]
5.196.106.224 - - [06/Sep/2024:09:22:12 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=type_repas&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A21%3A55Z&nonce=236313114175822a52824846e1c5515f&signature=2H8d2ltkEjQijtYyxbK7TT%2BQPuSurt%2BtIMRV59WTQps%3D HTTP/1.1" 200 1228810 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [16.766 s]
5.196.106.224 - - [06/Sep/2024:09:22:12 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A21%3A55Z&nonce=e606ce5195747f04de95893df05c671&signature=aWLQTcfZHFj0FDrzgGBkTKPfG8L7s1MtPQA6C%2B1TDQg%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [16.748 s]
5.196.106.224 - - [06/Sep/2024:09:22:12 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A21%3A55Z&nonce=874a925b5c6635ef55d74462d3ab04&signature=9Bf/XtXM5Lp1J6S1JG508Ym870Iy6/PsQlD6AHkPbdw%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [16.889 s]
5.196.106.224 - - [06/Sep/2024:09:22:12 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A21%3A55Z&nonce=ddd2c19526cee91e0af2f3ccc80f90e1&signature=fQEX/eYnh/OpnTQJjCh2wEFEPLdvD1lg0GEvbLY%2B%2Bgg%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [16.998 s]
5.196.106.224 - - [06/Sep/2024:09:22:12 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=niveau_scolaire&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A21%3A55Z&nonce=6d85a75064dd49abee11fcfafb8835a1&signature=Fjk/0BOUHYDtOIYj1JID0vAAeW5RJkhi09IvL3cKlwQ%3D HTTP/1.1" 200 1229416 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [16.959 s]
5.196.106.224 - - [06/Sep/2024:09:22:13 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&filter-actif=true&filter-status=_all&time_interval=year&algo=sha256&timestamp=2024-09-06T07%3A21%3A56Z&nonce=7354801a4a7bee51e8c2db334085a106&signature=yAGlnCTlQwfoZsZWsIMjj4sE5xFrDeHwz0T%2Bf1c2u%2BA%3D HTTP/1.1" 200 1228476 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [16.902 s]
5.196.106.224 - - [06/Sep/2024:09:22:13 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A21%3A55Z&nonce=7f7dc1f97fab174b88b8f23d9c8db1f1&signature=DQZuRzCRxu4cGaenxN5yBah2No%2BhGZGWDVoQPIv3DYU%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [17.473 s]
5.196.106.224 - - [06/Sep/2024:09:22:13 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A21%3A55Z&nonce=62fa9c65d4e9cf4538c84eac2cd35a27&signature=vx0YDsXDEq3CgYUDrfpo2DlQG8cyp5WmrnE%2BWspfQwA%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [17.483 s]
5.196.106.224 - - [06/Sep/2024:09:22:18 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A22%3A09Z&nonce=74ddd24ef94f0ffe94995943edafa399&signature=wzI3sOx3ehli8Hm2YGYzgHCenjSCunKXT7g7k8Yd11o%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [9.501 s]
5.196.106.224 - - [06/Sep/2024:09:22:21 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=type_repas&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A22%3A13Z&nonce=54a91cb08e171e82ba687e8b742fa32b&signature=YKXox5EABJhOtnjGvyZ8w4ngbv/sC%2B34R8vw4KIeun4%3D HTTP/1.1" 200 1228810 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [7.862 s]
5.196.106.224 - - [06/Sep/2024:09:22:23 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A22%3A15Z&nonce=e1fa0debb58a188ca89a24652ed036c7&signature=bNPxGt4o0HLE3W4vIAG0m1/nvP05o0%2Bk8/yhoxMV0eM%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [8.654 s]
5.196.106.224 - - [06/Sep/2024:09:22:29 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=niveau_scolaire&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A22%3A20Z&nonce=bce81434b277260909e7831bd03bdf5d&signature=tC8BhytL1kEs0A4bdswU04RoUuipLGcrTi0SRawufY4%3D HTTP/1.1" 200 1229416 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [9.076 s]
5.196.106.224 - - [06/Sep/2024:09:22:31 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A22%3A21Z&nonce=8d6670cd9fd2bf267466c319ba6a6321&signature=K4b8AXq0cDfCXvFzKTtCplyYEWt9jC70M7AfVZoncKQ%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [9.699 s]
5.196.106.224 - - [06/Sep/2024:09:22:33 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=genre&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A22%3A24Z&nonce=cf76fd4211c62b2c3544ad7c5cb033b8&signature=xwk13nyBCV8YqpMJ/62AHlWqjPs77sgn49qtRMzwCQI%3D HTTP/1.1" 200 1228732 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [9.077 s]
5.196.106.224 - - [06/Sep/2024:09:22:54 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&filter-actif=true&filter-status=_all&time_interval=year&algo=sha256&timestamp=2024-09-06T07%3A22%3A45Z&nonce=9b6ab79e3e6b502a0c8fa0f542cfe498&signature=GuT%2BjtT822PSiIYzANqDmCTtY9y5yqx3lhI8g%2BvL%2BTA%3D HTTP/1.1" 200 1228476 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [8.653 s]
5.196.106.224 - - [06/Sep/2024:09:22:54 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&group-by=niveau_scolaire&filter-actif=true&filter-status=_all&time_interval=none&hide_none_label=false&algo=sha256&timestamp=2024-09-06T07%3A22%3A45Z&nonce=24be12c30e145d4aabf8f14e6d335e18&signature=5U3nwpmsZO1%2BzqJxyp9tU3gybxiknhCFserIZ9JaT0Y%3D HTTP/1.1" 200 1229416 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [8.699 s]
5.196.106.224 - - [06/Sep/2024:09:22:56 +0200] "GET /api/statistics/cards/count/?orig=agents.mes-demarches.nimes.fr&form=enfant&filter-actif=true&filter-status=_all&time_interval=year&algo=sha256&timestamp=2024-09-06T07%3A22%3A45Z&nonce=fcd93c0f3e5d6c73c6475c1e08fc05f2&signature=Q1zylP3dcsBEYxJJXmHTrRJ9ozqCCk%2B67Z8sLecNXZ8%3D HTTP/1.1" 200 1228476 "-" "python-requests/2.28.1" "formulaires.mes-demarches.nimes.fr" [10.339 s]

Ces temps d'exécution correspondent à des requêtes SQL lentes, mais pas sur le bon ordre de grandeur. Je note dans ces requêtes a minima la requête suivante:

SELECT statistics_data->'genre', COUNT(*) FROM carddata_40_enfant WHERE receipt_time IS NOT NULL AND status != 'draft' AND statistics_data->'actif' @> 'true' GROUP BY statistics_data->'genre' ORDER BY statistics_data->'genre';

Je ne saisis pas l'intérêt du statistics_data sur cet usage. Avec statistics_data la requête prend 150ms, si je remplace l'accès à ->'genre' par l'utilisation du champ f6 je passe sous les 100ms. Si en prime je remplace l'accès à ->'actif' par le champ f338, je tombe sous les 30ms.

La lenteur de ces appels a un impact fort sur la plateforme et consomme un nombre très important de workers.


Related issues

Related to Combo - Development #95189: dataviz, indiquer quels appels ont besoin des sous-filtresSolution déployée10 September 2024

Actions

Associated revisions

Revision e251e4cf (diff)
Added by Valentin Deniaud 20 days ago

statistics: include subfilters list only when requested (#95013)

History

#1

Updated by Frédéric Péters 30 days ago

  • Assignee set to Valentin Deniaud
  • Priority changed from Haut to Normal
#3

Updated by Frédéric Péters 30 days ago

Après quelques mesures il me semble que le truc ici est qu'on accompagne le calcul des totaux de "subfilters" et que c'est la construction de cette partie (la méthode add_formdefs_subfilters) qui prend beaucoup de temps.

J'imagine que c'est utilisé pour affiner le contenu de la cellule "Filtre" (?), et de là, quand on est sur un portail ne présentant pas de cellule "filtre", on pourrait ne pas calculer ça ?

#4

Updated by Valentin Deniaud 27 days ago

Pierre Ducroquet a écrit :

Je ne saisis pas l'intérêt du statistics_data sur cet usage. Avec statistics_data la requête prend 150ms, si je remplace l'accès à ->'genre' par l'utilisation du champ f6 je passe sous les 100ms. Si en prime je remplace l'accès à ->'actif' par le champ f338, je tombe sous les 30ms.

Il s'agit de permettre des stats sur plusieurs formulaires, genre sélectionner tous les formulaires de la catégorie signalement, et filtrer sur le champ « genre » qu'ils auraient en commun.

Ce serait assez relou d'avoir une optimisation spécifique pour le cas un formulaire, en ciblant directement les colonnes.

Frédéric Péters a écrit :

Après quelques mesures il me semble que le truc ici est qu'on accompagne le calcul des totaux de "subfilters" et que c'est la construction de cette partie (la méthode add_formdefs_subfilters) qui prend beaucoup de temps.

J'imagine que c'est utilisé pour affiner le contenu de la cellule "Filtre" (?), et de là, quand on est sur un portail ne présentant pas de cellule "filtre", on pourrait ne pas calculer ça ?

Cette partie « subfilters » s'affiche aussi dans le manager lors de la configuration de la cellule, l'idée paraît bonne en tout cas, ce serait passer dans combo un nouveau paramètre à tous les appels include_subfilters à true ou false en fonction du contexte.

#5

Updated by Robot Gitea 26 days ago

  • Status changed from Nouveau to En cours

Valentin Deniaud (vdeniaud) a ouvert une pull request sur Gitea concernant cette demande :

#6

Updated by Valentin Deniaud 26 days ago

  • Related to Development #95189: dataviz, indiquer quels appels ont besoin des sous-filtres added
#7

Updated by Robot Gitea 26 days ago

  • Status changed from En cours to Solution proposée
#8

Updated by Robot Gitea 20 days ago

  • Status changed from Solution proposée to Solution validée

Frédéric Péters (fpeters) a approuvé une pull request sur Gitea concernant cette demande :

#9

Updated by Robot Gitea 20 days ago

  • Status changed from Solution validée to Résolu (à déployer)

Valentin Deniaud (vdeniaud) a mergé une pull request sur Gitea concernant cette demande :

#10

Updated by Transition automatique 20 days ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF