Projet

Général

Profil

Actions

Anomalie #290

fermé

[AsgardMenu] Performance très dégradée en cas de connexion par VPN

Ajouté par Leslie Lemaire il y a plus de 4 ans. Mis à jour il y a plus de 4 ans.

Statut:
Fermé
Priorité:
Haut
Assigné à:
Version cible:
Début:
30/06/2020
Echéance:
% réalisé:

100%

Temps estimé:
# ref:

Description

message de Michel Auzanneau du 29 juin 2020

En VPN, le premier chargement de QGIS avec l'extension MenuBuilder for ASGARD met 29 minutes.

Pourquoi l'extension à son démarrage va lire les commentaires de toutes les colonnes de toutes les table ?

Exemple d'une capture de requête du plugin MenuBuilder for ASGARD au lancement de QGIS :

select description from pg_description
join pg_class on pg_description.objoid = pg_class.oid
join pg_namespace on pg_class.relnamespace = pg_namespace.oid
where relname = 'commune_d16_2012' and nspname='r_dv3f_indicateurs'

En suivant l'avancement du plugin dans le tableau de bord de PgAdmin4, c'est cette étape qui est extrêmement chronophage.


Fichiers

menu_builder_dialog.py (33 ko) menu_builder_dialog.py Leslie Lemaire, 30/06/2020 11:56

Mis à jour par Leslie Lemaire il y a plus de 4 ans

La requête par laquelle MenuBuilder récupère les commentaires est sous-optimale :
- elle contient deux jointures inutiles ;
- elle prend les champs de la table et de ses colonnes, ce qui représente une augmentation significative du volume de données transféré... tout ça pour ensuite ne conserver que la première ligne du résultat en partant du principe qu'il s'agira du commentaire de la table (ce qui n'est d'ailleurs pas nécessairement vrai).

Ceci a toutefois un impact restreint sur la performance : avec la base de la DDT 16 (vue qgis_menu_builder_metadata contenant plus de 3000 lignes), corriger ces deux problèmes ne fait gagner que quelques dizaines de secondes.

Avec correctif, Michel Auzanneau indique :
- temps de chargement de QGIS en VPN sans ASGARD de 2:21 mn ;
- temps de chargement de QGIS en VPN AVEC ASGARD de 28:20 mn.

Ce qui fait une différence avec le VPN semble plutôt être le nombre de requêtes envoyées au serveur, en l'occurrence une pour chaque table.

En modifiant le plugin pour qu'il récupère en une seule fois tous les commentaires, l'intervalle entre l'authentification et la fin du chargement de QGIS tombe à 20sec (test LL sur le serveur de la DDT 16 en VPN).

Correctifs réalisés :
- ajout d'un champ table_comment à la vue qgis_menubuilder_metadata pour optimiser la récupération du commentaire ;
- modification lourde du plugin pour supprimer les opérations de récupération table par table des commentaires.

La fonction get_table_comment est supprimée, de même que les deux appels à cette fonction (comment = self.get_table_comment(uri_struct.uri)).

Les deux commandes par lesquels le plugin récupère le contenu de qgis_menubuilder_metadata sont modifiées :

avant :
select = """
select name, profile, model_index, datasource_uri
from {}.{}
where profile = '{}'
""".format(schema, self.table, profile)

après :
select = """
select name, profile, model_index, table_comment, datasource_uri
from {}.{}
where profile = '{}'
""".format(schema, self.table, profile)

Enfin, for name, profile, model_index, datasource_uri in self.sortby_modelindex(rows): devient for name, profile, model_index, comment, datasource_uri in self.sortby_modelindex(rows):.

Mis à jour par Leslie Lemaire il y a plus de 4 ans

  • Statut changé de Nouveau à Résolu

Mis à jour par Leslie Lemaire il y a plus de 4 ans

  • Statut changé de Résolu à Fermé
Actions

Formats disponibles : Atom PDF