Anomalie #26333
ferméREVIEW - La recherche de documents n'aboutit pas pour certains utilisateurs
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 Emmanuel DILLARD il y a plus d'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 plus d'un an
- Echéance
04/09/2023supprimé - 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 plus d'un an
- Projet Parapheur 2301.0.3 (Correctif) ajouté
Mis à jour par Emmanuel DILLARD il y a plus d'un an
- Statut changé de R&D - A planifier à R&D - En cours
- Assigné à
Emmanuel DILLARDsupprimé
Mis à jour par Jean-Laurent DUZANT il y a plus d'un an
- Assigné à mis à Jean-Laurent DUZANT
Mis à jour par Jean-Laurent DUZANT il y a plus d'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 plus d'un an
- Statut changé de R&D - En cours à R&D - En test
Mis à jour par Jean-Laurent DUZANT il y a plus d'un an
- Statut changé de R&D - En test à R&D - Terminé