Development #95013
Performances: les appels /api/statistics/cards/count sont beaucoup trop lents
0%
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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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×tamp=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
Associated revisions
History
Updated by Frédéric Péters 30 days ago
- Assignee set to Valentin Deniaud
- Priority changed from Haut to Normal
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 ?
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.
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 :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/1786
- Titre : WIP: statistics: include subfilters list only when requested (#95013)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/1786/files
Updated by Valentin Deniaud 26 days ago
- Related to Development #95189: dataviz, indiquer quels appels ont besoin des sous-filtres added
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 :
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 :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/1786
- Titre : statistics: include subfilters list only when requested (#95013)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/1786/files
Updated by Transition automatique 20 days ago
- Status changed from Résolu (à déployer) to Solution déployée
statistics: include subfilters list only when requested (#95013)