Projet

Général

Profil

Actions

Anomalie #26333

fermé

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

Ajouté par Etienne FAMERY il y a plus d'un an. Mis à jour il y a environ un an.

Statut:
R&D - Terminé
Priorité:
1-Majeur
Version cible:
Début:
21/08/2023
Echéance:
Projet 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;

Mis à jour par Sarah BAZIN il y a environ un an

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

Mis à jour par Emmanuel DILLARD il y a environ un an

  • 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

Mis à jour par Emmanuel DILLARD il y a environ un an

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

Mis à jour par Emmanuel DILLARD il y a environ un an

  • Projet Parapheur 2301.0.3 (Correctif) ajouté

Mis à jour par Emmanuel DILLARD il y a environ un an

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

Mis à jour par Jean-Laurent DUZANT il y a environ un an

  • Assigné à mis à Jean-Laurent DUZANT

Mis à jour par Jean-Laurent DUZANT il y a environ un an

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.

Mis à jour par Jean-Laurent DUZANT il y a environ un an

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

Mis à jour par Jean-Laurent DUZANT il y a environ un an

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

Formats disponibles : Atom PDF