Accéder au contenu principal Passer au contenu complémentaire

Optimisation des performances d'une application

Il est possible d'améliorer les performances d'une application en réduisant sa taille, en simplifiant son modèle de données et en utilisant de façon stratégique l'analyse d'ensembles. Cette section vous aidera a éviter les problèmes de performances en vous montrant les domaines dans lesquels les performances peuvent être impactées et comment évaluer les performances des applications et en effectuer le suivi.

Complexité des applications

Voici quelques-unes des catégories qui peuvent faciliter le diagnostic des problèmes. Les applications les plus complexes sont les moins performantes.

Les applications simples :

  • N'incluent pas d'instructions If() ou d'analyses d'ensembles complexes.
  • N'incluent pas de tables de grandes tailles.
  • Utilisent un modèle de données simple.
  • Contiennent des calculs simples.
  • Peuvent contenir de grands volumes de données.

Les applications modérément complexes :

  • Ont un modèle de données avec de nombreuses tables, mais suivent les meilleures pratiques.
  • Utilisent plusieurs instructions If() et l'analyse d'ensembles.
  • Comportent des tables de grandes tailles ou larges sur des feuilles (15 colonnes ou plus).

Les applications complexes :

  • Ont un modèle de données très complexe.

  • Se connectent à de grands volumes de données.
  • Contiennent des calculs, des graphiques et des tables complexes.

Détails des applications

Vous devez évaluer votre environnement matériel par rapport à la taille des applications, car cela affecte les performances de votre déploiement Qlik Sense. Par exemple, si vous n'optimisez pas vos applications, il se peut qu'elles nécessitent davantage de ressources matérielles.

La surveillance de la taille des applications vous aidera à :

  • Comprendre les performances actuelles.
  • Comprendre l'impact du déploiement d'une nouvelle application sur les performances.
  • Comprendre l'impact de la modification d'une application existante sur les performances.
  • Résoudre les problèmes de performances.
  • Planifier la croissance future.

Qlik fournit des outils qui peuvent vous aider à évaluer vos applications. Pour plus d'informations, voir : Performances et évolutivité dans Qlik Sense Enterprise (uniquement en anglais).

Voici les éléments de base d'une application susceptibles d'affecter les performances :

Détails d'une application susceptibles d'affecter les performances
Fonction Description
Taux d'occupation du disque par l'application (Mo) Vous trouverez la taille d'une application dans QMC. Accédez à Applications et ouvrez le Sélecteur de colonne à droite, situé à côté d'Actions. Cliquez sur la case d'option située à côté de Taille de fichier (Mo). Si vous utilisez Qlik Sense Desktop, vous trouverez la taille des applications dans Windows Explorer. Le dossier par défaut est %USERPROFILE%\Documents\Qlik\Sense\Applications. Le dossier Applications contient la liste de tous les noms d'application et des tailles de fichier.

Taille de l'application dans la RAM (Go)

Vous pouvez déterminer l'empreinte RAM de base d'une application comme suit :

  1. Redémarrez le serveur Qlik Sense.
  2. Notez l'utilisation actuelle de RAM.
  3. Ouvrez l'application Qlik Sense.
  4. Enregistrez la différence dans RAM.

Vous pouvez utiliser App Metadata Analyzer pour rechercher cette mesure, si vous utilisez Qlik Sense June 2018 ou une version ultérieure. Pour plus d'informations, voir Analyseur des métadonnées des applications (uniquement en anglais).

Nombre total de lignes de l'application (M)

Vous pouvez utiliser des champs système pour calculer le nombre total de lignes. Créez un KPI avec la mesure Sum($Rows). Pour plus d'informations, voir Champs système.
Nombre total de champs de l'application Vous pouvez utiliser des champs système pour calculer le nombre total de champs. Créez un KPI avec la mesure Sum($Fields). Pour plus d'informations, voir Champs système.
Nombre total de tables de l'application Vous pouvez utiliser des champs système pour calculer le nombre total de tables. Créez un KPI avec la mesure Count(DISTINCT $Table). Pour plus d'informations, voir Champs système.

Suivi de votre application

Console de gestion Qlik (QMC) contient des applications permettant de surveiller les performances et l'utilisation du système sur Qlik Sense Enterprise on Windows :

  • L'application Operations Monitor fournit des informations sur l'utilisation du matériel telle que la mémoire du serveur et l'utilisation de CPU, les utilisateurs actifs et l'activité des tâches de chargement. Elle fournit également des informations synthétisées et détaillées sur les erreurs, les avertissements et les activités de journalisation dans l'environnement du serveur Qlik Sense.

  • L'application License Monitor suit l'utilisation des licences et facilite la surveillance des changements d'attribution des licences.

  • L'application Log Monitor présente la quasi totalité des données de journalisation disponibles et permet l'analyse des tendances et le dépannage.
  • L'application Sessions Monitor affiche les données de journalisation relatives à l'utilisation des applications.
  • L'application Reloads Monitor présente des informations détaillées sur les données chargées, depuis QMC et depuis les applications ouvertes dans le hub.
  • L'application Sense System Performance Analyzer affiche les performances de Qlik Sense sur tous les nœuds.
  • L'application Sense Connector Logs Analyzer fournit des informations sur l'utilisation et les erreurs de connecteurs Qlik spécifiques.
  • L'application App Metadata Analyzer offre une vue holistique de l'ensemble de vos applications Qlik Sense, y compris des détails de niveau granulaire du modèle de données des applications et leur utilisation des ressources.

Pour plus d'informations, voir Surveillance d'un site Qlik Sense Enterprise on Windows (uniquement en anglais).

Grands volumes de données

Lorsque vous vous connectez à de grands volumes de données, vous pouvez avoir recours à ces stratégies d'architecture.

Segmentation

Vous pouvez segmenter les fichiers QVDs en fonction de dimensions, par exemple, au niveau d'un cadre temporel, d'une région ou d'une agrégation. Par exemple, vous pouvez avoir :

  • Un fichier QVD contenant les données des deux dernières années.
  • Un fichier QVD contenant l'historique des données au-delà de deux ans.
  • Un fichier QVD contenant l'ensemble des données agrégées à un niveau supérieur. Par exemple, par mois au lieu de par date, ou par pays au lieu de par client.

  • Un grand fichier QVD contenant toutes les données, uniquement utilisée par un petit sous-ensemble d'utilisateurs.

Vous pouvez segmenter les applications de la même manière. Les applications plus petites répondront aux besoins analytiques de la plupart des utilisateurs. Cela permet d'économiser de la mémoire.

Vous pouvez également avoir plusieurs applications axées sur différentes régions. Ainsi, les utilisateurs n'ouvriront pas une application contenant des données qui ne les intéressent pas ou auxquelles ils n'ont pas le droit d'accéder. Les données non accessibles via l'accès de section affectent tout de même la mémoire.

Génération d'applications On-demand (ODAG)

Les applications On-demand Qlik Sense permettent aux utilisateurs d'agréger les vues de magasins de données volumineux. Ils peuvent identifier et charger les sous-ensembles de données qui les intéressent pour les analyser en détail.

D'un point de vue de l'utilisateur, il existe deux applications :

  1. Un panier contenant les données agrégées.
  2. Une application modèle vide utilisée pour afficher les détails.

L'utilisateur effectue ses sélections dans l'application de type panier. Une fois un certain seuil atteint, un script LOAD personnalisé est créé et renseigne l'application modèle au moyen des détails demandés. Pour plus d'informations, voir Gestion du Big Data à l'aide des applications On-demand.

Performances du modèle de données

Il existe des indicateurs qui peuvent avoir un impact sur les performances d'un modèle de données. Chacun constitue une meilleure pratique qui améliore la facilité d'utilisation d'une application.

Meilleures pratiques pour améliorer les performances des modèles de données
Action Description

Suppression des clés synthétiques

Qlik Sense crée des clés synthétiques quand deux ou davantage de tables de données comportent deux ou davantage de champs en commun. Cela indique une erreur dans le script ou le modèle de données. Pour diagnostiquer les clés synthétiques, voir Clés synthétiques.

Suppression des références circulaires du modèle de données

Il se produit des références circulaires quand deux champs comportent plus d'une association. Qlik Sense tente de les résoudre en changeant la connexion à l'une des tables. Cependant, tous les avertissements de référence circulaire doivent être résolus ; voir Principe et résolution des références circulaires.

Granularité appropriée des données

Vous ne devriez charger que les données nécessaires. Par exemple : un groupe d'utilisateurs ne nécessite que les données divisées par semaine, mois et année. Vous pouvez soit charger les données agrégées, soit agréger les données au sein du script de chargement, pour économiser de la mémoire. Si un utilisateur a besoin de visualiser les données à un niveau de granularité inférieur, vous pouvez utiliser ODAG ou le chaînage de documents.

Utilisation, autant que possible, de QVDs

Un fichier QVD est un fichier contenant une table de données exportée à partir de Qlik Sense. Le format de fichier est optimisé pour la vitesse de lecture des données à partir d'un script tout en demeurant très compact. La lecture de données à partir d'un fichier QVD est généralement 10 à 100 fois plus rapide qu'à partir d'autres sources de données. Pour plus d'informations, voir : Utilisation de fichiers QVD.

Optimisation des fichiers QVD lors du chargement

Les fichiers QVD peuvent être lus dans deux modes : standard (rapide) et optimisé (plus rapide). Le mode sélectionné est déterminé automatiquement par le moteur de script.

Les charges optimisées présentent certaines limitations. Il est possible de renommer des champs, mais n'importe laquelle de ces opérations entraînera un chargement standard :

  • Toutes les transformations appliquées aux champs chargés
  • Utilisation d'une clause where entraînant la décompression des enregistrements par Qlik Sense
  • Application de l'instruction Map à un champ chargé

Exploitation des chargements incrémentiels

Si votre application se connecte à une grande quantité de données provenant de bases de données mises à jour en permanence, le rechargement de l'ensemble de données complet peut se révéler extrêmement fastidieux. Au lieu de cela, vous devriez utiliser le chargement incrémentiel, pour récupérer les enregistrements nouveaux ou modifiés de la base de données. Pour plus d'informations, voir Chargement incrémentiel d'enregistrements nouveaux et mis à jour.

Consolidation du modèle Snowflake

Si vous avez un modèle de données de type flocon de neige, vous pouvez peut-être réduire le nombre de tables de données en joignant certaines d'entre elles à l'aide du préfixe Join ou d'un autre type de mappage. Cela est particulièrement important pour les tables de faits de grandes tailles. Une bonne règle d'or consiste à avoir une seule table de grande taille. Pour plus d'informations, voir To Join or Not to Join.

Dénormalisation des tables comportant un petit nombre de champs

Si vous disposez de deux tables avec quelques champs, les joindre peut améliorer les performances. Pour plus d'informations, voir Création de scripts pour utilisateurs confirmés.

Tables (de feuilles) de recherche dénormalisées avec chargements de mappage

Vous ne devriez pas utiliser le préfixe Join si vous ne devez ajouter qu'un champ d'une table à l'autre. Vous devriez utiliser la fonction de recherche ApplyMap ; voir Don't join - use ApplyMap.

Suppression ou découplage des horodatages d'un champ de date

Les champs de date peuvent occuper l'espace, en présence de l'horodatage, car la représentation de chaîne est plus grande et le nombre de valeurs distinctes supérieur. Si l'analyse n'a pas besoin d'être précise, vous pouvez arrondir l'horodatage, par exemple, sur l'heure la plus proche, via Timestamp(Floor(YourTimestamp,1/24)), ou supprimer totalement le composant horaire via Date(Floor(YourTimestamp)).

Si vous souhaitez utiliser l'horodatage, vous pouvez le découpler de la date elle-même. Vous pouvez utiliser la même fonction Floor(), puis créer un champ avec l'heure extraite en utilisant une fonction telle que la suivante : Time(Frac(YourTimestamp)).

Suppression des champs inutiles du modèle de données

Vous ne devriez charger que les champs nécessaires dans votre modèle de données. Évitez d'utiliser Load * et SELECT. Assurez-vous de conserver :

  • Les champs nécessaires à votre analyse.
  • Les champs effectivement utilisés dans l'application.

Éviter les tables de liaison avec de grands volumes de données

Vous devriez utiliser autant que possible des tables de liaison. Cependant, si vous avez affaire à de grands volumes de données, notez que les tables concaténées peuvent surpasser les performances des tables de liaison.

Division des dimensions concaténées en nouveaux champs

Vous devriez diviser les dimensions concaténées en champs distincts. Cela réduit le nombre d'occurrences de valeurs uniques dans vos champs. Cette opération est similaire à l'optimisation des horodatages.

Utilisation autant que possible d'AutoNumber

Vous pouvez créer un chargement optimisé en commençant par charger les données à partir d'un fichier QVD, puis en convertissant les valeurs en clés de symbole à l'aide de l'instruction AutoNumber. Pour plus d'informations, voir AutoNumber.

Éviter les îlots de données

Les îlots de données peuvent s'avérer utiles, mais ils affectent généralement les performances. Si vous créez des îlots pour les valeurs de sélection, utilisez des variables.

Stockage des QVD en fonction de plages de temps incrémentielles

Vous devriez stocker les QVD dans des segments, par exemple, mensuels. Ces QVD mensuels plus petits peuvent ensuite prendre en charge de nombreuses applications différentes qui n'auront peut-être pas besoin de la totalité des données.

Performances des feuilles

Voici quelques meilleures pratiques qui amélioreront les performances des feuilles et des visualisations.

Meilleures pratiques pour améliorer les performances des feuilles
Action Description

Éviter autant que possible d'utiliser la fonction If()

Si la fonction If() est utilisée dans une fonction d'agrégation, elle s'applique au niveau des enregistrements et est évaluée de nombreuses fois.

Par exemple, si vous disposez de 1 000 enregistrements dans une agrégation, une condition If() sera évaluée 1 000 fois. Si vous imbriquez les instructions, cela devrait augmenter rapidement. Utilisez plutôt l'analyse d'ensembles. Un filtre d'analyse d'ensembles est appliqué avant l'agrégation, accélérant ainsi la réponse. L'analyse d'ensembles permet également de mettre ces réponses en cache, alors que If() ne le permet pas. Vous pouvez également envisager d'utiliser d'autres fonctions et modifications du modèle de données.

Évitez, si possible, d'utiliser des champs provenant de tables différentes à l'intérieur d'une table d'agrégation.

Lors de l'évaluation d'une agrégation, le calcul s'effectue en deux étapes :

  1. La première étape consiste à rechercher les combinaisons pertinentes devant faire l'objet du calcul. Cette étape est une étape monothread.

  2. La deuxième étape consiste à effectuer le calcul. Cette étape est une étape multithread.

La partie monothread peut considérablement affecter les performances. Par exemple, si vous avez plusieurs champs à l'intérieur de l'agrégation comme Sum(Quantity*ListPrice). Si Quantity se trouve dans la table de faits et si ListPrice se trouve dans la table de produits principale, le moteur doit commencer par joindre les deux tables pour rechercher les combinaisons avant de pouvoir lancer la somme du produit. La jointure constitue la partie monothread, tandis que la somme représente la partie multithread. Si les deux champs se trouvent dans la même table, aucune jointure n'est nécessaire et l'agrégation est évaluée beaucoup plus vite.

Utilisation minimale des fonctions Aggr() et Aggr() imbriquées

La fonction Aggr() affecte énormément les performances. Son utilisation de manière incorrecte peut donner des résultats erronés. Par exemple, dans une table contenant des dimensions différentes des dimensions de la fonction Aggr(). Pour plus d'informations, voir When should AGGR not be used?

Utilisation autant que possible de l'analyse d'ensembles

Vous pouvez utiliser l'analyse d'ensembles pour définir un ensemble de valeurs de données différent de l'ensemble normal défini par les sélections actives. Pour plus d'informations, voir Analyse d'ensembles.

Éviter autant que possible les comparaisons de chaînes

Les comparaisons de chaînes ne sont pas aussi efficaces que l'analyse d'ensembles. Par exemple, vous devriez éviter Match(), MixMatch(), WildMatch()et Pick(). Créez des indicateurs dans le script ou utilisez plutôt l'analyse d'ensembles. Pour plus d'informations, voir Fonctions conditionnelles et Performance of conditional aggregations.

Utilisation de conditions de calcul sur des objets contenant des calculs intensifs

Vous avez peut-être des visualisations contenant de nombreux enregistrements sans sélections. Comme meilleure pratique, ajoutez des conditions de calcul aux objets, de sorte qu'ils n'apparaissent que lorsque certaines sélections sont effectuées. Cela empêche la création d'hypercubes très volumineux. Par exemple : GetSelectedCount([Country])=1 OR GetPossibleCount([Country])=1. Dans ce scénario, la visualisation ne s'affiche pas, sauf si l'utilisateur sélectionne un seul pays ou s'il effectue d'autres sélections dans lesquelles un seul pays est possible.

Calcul préalable, autant que possible, des mesures dans le script

Toute mesure au niveau de granularité le plus bas du modèle de données doit être calculée dans le script. Par exemple, si, dans le même enregistrement d'une table, vous avez Sales et Cost, vous devriez dériver la marge en calculant Sales - Cost AS Margin. Vous pouvez également agréger d'autres valeurs à l'avance, si vous savez qu'elles ne varieront pas en fonction de la sélection, ou qu'elles sont liées à un niveau de granularité différent.

Tables comptant moins de quinze colonnes et des conditions de calcul

Une table contenant quinze colonnes peut être considérée comme large. Si vos tables comportent de nombreux enregistrements, vous devriez utiliser des conditions de calcul sur l'objet table afin de ne l'afficher que lorsque certaines sélections sont effectuées ou lorsque certains critères sont remplis. Si votre table est très large, vous pouvez :

  • Créer plusieurs tables plus petites qui s'affichent de manière conditionnelle.
  • Utiliser des méthodes pour afficher les colonnes de manière conditionnelle.
  • Limiter vos tables aux seuls champs nécessaires à votre analyse.

Feuilles sans nombre excessif d'objets

Les objets sont calculés lorsqu'un utilisateur accède à la feuille. Chaque fois qu'un utilisateur effectue une sélection sur cette feuille, chaque objet est recalculé, si cet état actif ne figure pas dans le cache. Si vous disposez d'une feuille contenant de nombreux graphiques, l'utilisateur devra attendre que chaque objet soit calculé à quasiment toutes les sélections. Cela exerce une charge considérable sur le moteur. Comme meilleure pratique, suivez le concept Dashboard/Analysis/Reporting (DAR) pour développer une application propre et minimale. Pour plus d'informations, voir DAR methodology.

Utilisation d'indicateurs numériques dans le script pour les utiliser dans l'analyse d'ensembles

L'analyse d'ensembles avec des indicateurs peut s'avérer plus efficace que l'utilisation de multiplications ou de comparaisons de chaînes.

Utilisation d'éléments principaux ou de variables pour les expressions

Les éléments principaux permettent de glisser-déposer des métriques gouvernées et de garantir la mise en cache des expressions. Par exemple, Sum(Sales) est différent de SUM(Sales). Les expressions sont mises en cache en fonction de leur orthographe et de leur casse, et elles doivent correspondre exactement afin de pouvoir être réutilisées.

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – dites-nous comment nous améliorer !