Projet

Général

Profil

Anomalie #26333

REVIEW - La recherche de documents n'aboutit pas pour certains utilisateurs

Ajouté par Etienne FAMERY il y a 8 mois. Mis à jour il y a 7 mois.

Statut:
R&D - Terminé
Priorité:
1-Majeur
Version cible:
Début:
21/08/2023
Echéance:
Tags Parapheur:
2301.0.3 (Correctif)

Description

Sur une instance MaarchParapheur de production contenant un certain volume de données :
select count() from main_documents;
66714
(1 ligne)
select count(
) from workflows;
78221
(1 ligne)

La recherche de documents pour les utlisateurs n'ayant pas le privilège "Accéder à tous les documents et gérer le circuit" n'aboutit jamais. La requête en cause est la suivante dans le fichier src/app/search/controllers/SearchController.php l.44 :

SELECT id, title, reference, typist, status, count(1) OVER() FROM main_documents WHERE id IN (
                SELECT DISTINCT ws1.main_document_id
                FROM workflows ws1
                WHERE typist = $val
                OR (ws1.process_date IS NOT NULL AND ws1.user_id = $val)
                OR (
                    ws1.user_id IN (
                        SELECT (SELECT $val) UNION (SELECT id FROM users WHERE substitute = $val)
                    )
                    AND ws1."order" = (
                        SELECT min(ws2."order") FROM workflows ws2 WHERE ws2.process_date IS NULL AND ws2.main_document_id = ws1.main_document_id
                    )
                )
            ) ORDER BY creation_date desc LIMIT 10;

On peut constater en lancant la requete sur une base vide (demo) , un temps d'exécution de 600ms. Le temps n'a pas pu être déterminé sur l'instance du client car la requête n'aboutit pas.
Une requête optimisée corrigeait le problème avec un temps d'exécution de 100 ms, par exemple :

WITH relevant_users AS (
    SELECT $val AS id
    UNION
    SELECT id FROM users WHERE substitute = $val
)
, min_orders AS (
    SELECT main_document_id, MIN("order") as min_order
    FROM workflows
    WHERE process_date IS NULL
    GROUP BY main_document_id
)

SELECT d.id, d.title, d.reference, d.typist, d.status, count(1) OVER() 
FROM main_documents d
JOIN workflows ws1 ON d.id = ws1.main_document_id
LEFT JOIN min_orders mo ON ws1.main_document_id = mo.main_document_id

WHERE d.typist = $val
OR (ws1.process_date IS NOT NULL AND ws1.user_id = $val)
OR (ws1.user_id IN (SELECT id FROM relevant_users) AND ws1."order" = mo.min_order)

ORDER BY d.creation_date DESC 
LIMIT 10;

Historique

#2 Mis à jour par Sarah BAZIN il y a 8 mois

  • Priorité changé de 2-Sérieux à 1-Majeur

#3 Mis à jour par Emmanuel DILLARD il y a 8 mois

  • Sujet changé de La recherche de documents n'aboutit pas pour certains utiliateurs à REVIEW - La recherche de documents n'aboutit pas pour certains utilisateurs
  • Echéance mis à 04/09/2023
  • Statut changé de A qualifier à R&D - A étudier

#4 Mis à jour par Emmanuel DILLARD il y a 8 mois

  • Echéance 04/09/2023 supprimé
  • Statut changé de R&D - A étudier à R&D - A planifier
  • Assigné à changé de Agnes GASTAMBIDE à Emmanuel DILLARD

#5 Mis à jour par Emmanuel DILLARD il y a 8 mois

  • Tags Parapheur 2301.0.3 (Correctif) ajouté

#6 Mis à jour par Emmanuel DILLARD il y a 8 mois

  • Statut changé de R&D - A planifier à R&D - En cours
  • Assigné à Emmanuel DILLARD supprimé

#7 Mis à jour par Jean-Laurent DUZANT il y a 7 mois

  • Assigné à mis à Jean-Laurent DUZANT

#8 Mis à jour par Jean-Laurent DUZANT il y a 7 mois

Suite à l'analyse effectuée, il est constaté que l'installation actuel de MaarchParpheur ne réalise pas la création des index dans la base de données à partir du fichier sql/index_creation.sql.
L'absence de ces index peut avoir un impact sur la performance de l'application lorsque celle-ci est utilisée avec une base de données de grande taille, entraînant des ralentissements.

Pour résoudre cette situation, il est recommandé d'exécuter la commande suivante en remplaçant les valeurs 'test' par les valeurs appropriées :

psql --host=adresse_hôte --username=nom_utilisateur --dbname=nom_base_de_données --quiet < MaarchParapheur/sql/index_creation.sql

Veillez à remplacer adresse_hôte, nom_utilisateur, et nom_base_de_données par les valeurs spécifiques à votre configuration.

#9 Mis à jour par Jean-Laurent DUZANT il y a 7 mois

  • Statut changé de R&D - En cours à R&D - En test

#11 Mis à jour par Jean-Laurent DUZANT il y a 7 mois

  • Statut changé de R&D - En test à R&D - Terminé

Formats disponibles : Atom PDF