Croissance déraissonable des Labdocs
- Role : enseignant / étudiant
- Page(s) / Url(s) : /report/xxxx /teacher/mission/yyy
- Comportement actuel (si besoin) : Le poids de la base de donnée en prod augmente très vite depuis février 2022. Suite à une analyse de @dhamc il semblerait que ce soit principalement du à des labdocs dessins qui contiennent des images dans la BD pourtant ces images sont normalement stockés en système de fichier.
- Comportement attendu : Aucune image ne devrait être stockée en BD. Les images de labdocs doivent être d'abord réduites puis stockées sous forme de fichier
- Proposition technique :
-
Corriger le bug -
Faire une migration pour extraire les images de la BD
## Analyse de @dhamc
Comme l'augmentation de la taille des LD se passe depuis le 1er fevrier, je regarde depuis cette date :
SELECT type_labdoc, COUNT(*) FROM labdoc WHERE id_labdoc > 577911 AND LENGTH(labdoc_data) > 1000000 GROUP BY type_labdoc;
Les LD de plus de 1 Mo se répartissent comme suit :
Ce sont les dessins qui prennent de la place
Je regarde les plus gros LD depuis cette date.
SELECT *, LENGTH(labdoc_data) FROM labdoc WHERE id_labdoc > 577911 ORDER BY LENGTH(labdoc_data) DESC;
J'en ai 151 dont 142 sont des dessins et le plus gros fait 7Mo
Je confirme que les LD dessins incluent leurs images dans le champ labdoc_data !
Par contre, il y a peu de gros LD de mission depuis le 1er février : seulement 4 au-delà de 0,1 Mo et ce sont des textes. Mon hypothèse ne semble pas tenir : ce n'est pas une mission qui aurait des LD de mission trop lourds.
D'ailleurs si on regarde les LD lourds (>1Mo) copiés depuis des LD de mission et la taille des LD de missions :
SELECT ld1.id_ld_origin, COUNT(*), LENGTH(ld2.labdoc_data) FROM labdoc ld1 LEFT JOIN labdoc ld2 ON ld1.id_ld_origin = ld2.id_labdoc WHERE ld1.id_labdoc > 577911 AND LENGTH(ld1.labdoc_data) > 1000000 GROUP BY ld1.id_ld_origin;
On voit que les gros LD ne correspondent pas à la duplication de gros LD de mission. Hypothèse abandonnée.
Donc : les gros LD sont des dessins et ils sont remplis par les étudiants. Est ce qu'une mission demande de faire de l'analyse d'image ? Je trie par mission :
SELECT code, COUNT(*) AS gros_ld, SUM(LENGTH(labdoc_data)) AS poids_cumules FROM labdoc JOIN report USING(id_report) JOIN mission USING(id_mission) WHERE id_labdoc > 577911 AND LENGTH(labdoc_data) > 1000000 GROUP BY id_mission;
J'ai donc les "coupables" : dans MEP202 et BIO202 les étudiants font de gros LD dessins Mais ça m'a tout l'air d'être une utilisation normale de LNB...