Article
· Avr 9 8m de lecture

Un aperçu des stratégies de performance de la plate-forme de données IRIS

Dans le monde des affaires, chaque seconde compte, et il est essentiel de disposer d'applications performantes pour rationaliser nos processus commerciaux. Nous comprenons l'importance de concevoir des algorithmes efficaces, mesurables par la notation big O.
Néanmoins, il existe de nombreuses stratégies pour augmenter la performance des systèmes construits sur la plate-forme de données IRIS. Ces stratégies sont tout aussi cruciales pour optimiser l'efficacité globale.
Rejoignons le voyage pour un aperçu des astuces permettant d'améliorer le fonctionnement d'IRIS Data Platform, où chaque petite astuce aidera vos applications à briller.

1. Utilisation d'index

L'indexation permet d'optimiser les requêtes en conservant un sous-ensemble organisé de données fréquemment demandées. Au sein de la plate-forme de données IRIS, différents types d'index répondent à des besoins spécifiques :

Index standard: Il s'agit de tableaux persistants associant les valeurs indexées au(x) RowID(s) des lignes correspondantes.

Exemple :

Index NameIDX ON Name;

Index bitmap: Un type d'index unique utilisant des chaînes de bits pour représenter des ensembles de valeurs RowID correspondant à une valeur indexée donnée.

Exemple :

Index RegionIDX ON Region [Type = bitmap];

Index en tranches: Cet index spécial permet l'évaluation rapide d'expressions spécifiques, telles que les sommes et les conditions de plage.

Exemple :

Index SalaryIDX ON Salary [Type = bitslice];

Index colonnaires: Spécifiquement conçus pour les requêtes très rapides, en particulier celles qui impliquent des opérations de filtrage et d'agrégation, sur des colonnes dont les données sont stockées sur plusieurs lignes.

Exemple :

Index AmountIDX ON Amount [Type = columnar];

2. Plan de requête

Nous voulons nous assurer que nos requêtes utilisent les index définis. Cependant, il arrive qu'elles ne soient pas exécutées comme prévu. Par exemple, si "NomColonne N'EST PAS NUL" est utilisé dans la clause WHERE de la requête, même si un index est défini pour NomColonne, l'index sera ignoré. Il n'est donc pas recommandé d'utiliser "NomColonne N'EST PAS NUL" si l'index de NomColonne est défini. Comment pouvons-nous déterminer si la requête utilise la table d'indexation ou non ? Le plan de requête est l'outil que nous pouvons utiliser pour vérifier si la requête utilise la table d'index ou si elle parcourt simplement l'ensemble de la table principale.

Comment utiliser le plan de requête ?

Exécutez Show Plan avec la commande SQL EXPLAIN ou l'option Show Plan dans le portail de gestion ->System Explore->SQL, puis passez à la première carte. Si la première puce du plan de requête est "Read master map", ou si le plan de requête appelle un module dont la première puce est "Read master map", la première carte de la requête est la carte maîtresse plutôt qu'une carte d'index. Étant donné que la carte maîtresse lit les données elles-mêmes, plutôt qu'un index des données, cela indique presque toujours un plan d'interrogation inefficace. À moins que la table ne soit relativement petite, nous devrions créer un index de sorte que lorsque nous réexécutons cette requête, la première carte du plan de requête indique "Lire la carte de l'index".

3. Optimiseur de requêtes et table de réglage

Lorsqu'il détermine la stratégie d'exécution optimale pour une requête SQL donnée, l'optimiseur de requêtes prend en compte trois facteurs clés :

  • ExtentSize : nombre de lignes pour chaque table utilisée dans la requête.
  • Selectivity : pourcentage de valeurs distinctes calculé pour chaque colonne utilisée par la requête.
  • BlockCount : nombre de blocs pour chaque carte SQL utilisée par la requête.

Ces statistiques peuvent être spécifiées dans la définition du stockage de la classe persistante.

Pour garantir une prise de décision correcte par l'optimiseur de requêtes, il est essentiel de définir ces valeurs correctement.

  • Nous avons la possibilité de définir explicitement l'une de ces statistiques lors de la création d'une classe (tableau) avant d'insérer des données dans le tableau.
  • Après avoir rempli le tableau avec des données représentatives, nous pouvons utiliser Tune Table pour calculer ces statistiques.
  • Après l'exécution de Tune Table, nous pouvons remplacer une statistique calculée en spécifiant une valeur explicite.

Nous pouvons évaluer les statistiques que nous avons explicitement définies par rapport aux résultats générés par Tune Table. Si les hypothèses de Tune Table s'avèrent moins qu'optimales pour l'optimiseur de requêtes, le choix d'une statistique explicitement définie par rapport à celle générée par Tune Table devient une alternative viable.

Qu'est-ce que Tune Table ?

Tune Table est un utilitaire conçu pour analyser les données d'une table, en fournissant des informations sur ExtentSize, la distribution des valeurs distinctes dans chaque champ et la taille moyenne des champs (longueur moyenne des valeurs dans chaque champ). En outre, il calcule le BlockCount pour chaque carte SQL. Nous avons la possibilité de demander à Tune Table d'exploiter ces informations pour mettre à jour les métadonnées associées à une table et à ses champs. Par la suite, l'optimiseur de requêtes utilise ces statistiques pour déterminer le plan d'exécution le plus efficace pour une requête.
Il est recommandé d'exécuter Tune Table sur une table après l'avoir alimentée avec un volume représentatif de données réelles. En règle générale, il suffit d'exécuter Tune Table une fois, en tant qu'étape finale du développement de l'application avant que les données ne soient mises en ligne. Dans certains scénarios, IRIS exécute automatiquement Tune Table la première fois qu'une requête SELECT est effectuée sur une table.
Toutefois, il existe également des méthodes manuelles pour exécuter Tune Table :

  • Utilisation de la liste déroulante Actions de l'interface SQL du portail de gestion.
  • Invoquer la méthode $SYSTEM.SQL.Stats.Table.GatherTableStats() Opens in a new tab pour une seule table ou toutes les tables de l'espace de noms actuel.
  • Exécution de la commande SQL TUNE TABLE pour une seule table.

4. Stockage en colonnes

Dans le stockage en colonnes, les données primaires sont stockées dans un global par colonne. Les séquences de 64 000 éléments de données sont stockées dans des indices globaux distincts. Les données sont codées à l'aide d'un codage vectoriel optimisé pour le stockage d'éléments du même type de données. En général, les requêtes analytiques s'exécutent rapidement, mais les transactions peuvent être plus lentes.
Quand devrions-nous choisir d'utiliser le stockage en colonnes pour améliorer les performances ?

  • Filtrage et agrégation de données dans des colonnes spécifiques pour effectuer des requêtes analytiques (OLAP).
  • Les données ne sont pas fréquemment mises à jour, insérées et supprimées ou mises à jour en masse.

5. Éviter d'ouvrir fréquemment des objets

L'ouverture fréquente d'objets peut ralentir le processus de demande. Par conséquent, nous devrions combiner l'ouverture d'objets identiques chaque fois que cela est possible et logique.

Lorsque nous devons renvoyer la valeur d'une propriété d'un objet, nous pouvons utiliser ##(ClassName).PropertyGetStored(id). Cette méthode intégrée est plus rapide que l'utilisation de object.Property après l'ouverture d'un objet par %OpenId().

6. Utilisation du Work Queue Manager

Lorsqu'un processus important doit être mené à bien et que certaines parties du processus peuvent être exécutées simultanément, il est conseillé d'envisager un système de traitement parallèle.

Le gestionnaire de files d'attente nous permet d'améliorer les performances en distribuant de manière programmatique le travail à plusieurs processus simultanés.

Comment utiliser le Work Queue Manager ?

Set queue = $system.WorkMgr.Initialize("/multicompile=1",.status)
For i=1:1:100{
  Set status = queue.Queue("##class(ClassName).ClassMethod",i)
}
If status =1 Set status = queue.WaitForComplete()
If 'status {
  Do $system.Status.DisplayError(status)
}

7. Outils de contrôle des performances

Plusieurs outils de surveillance du système sont disponibles dans la plate-forme de données IRIS. Nous examinerons ici brièvement ^%SYS.MONLBL et ^SystemPerformance.

^%SYS.MONLBL est un moniteur ligne par ligne qui permet de diagnostiquer le temps passé à exécuter le code sélectionné dans les routines. Cet utilitaire nous permet de surveiller et d'identifier la partie du code qui présente un problème de performance.

Pour lancer le moniteur, utilisez

%SYS>Do ^%SYS.MONLBL

^SystemPerformance est un outil d'instantané du système permettant de collecter des données détaillées sur les performances d'une instance d'IRIS Data Platform et de la plate-forme sur laquelle elle s'exécute. Le rapport qui en résulte peut aider à diagnostiquer les problèmes du système et peut être exécuté dans le terminal ou dans le portail de gestion. Par défaut, le répertoire de sortie du rapport est le répertoire install-dir\mgr de l'instance IRIS.

Pour démarrer le moniteur, utilisez

%SYS>do ^SystemPerformance

Pour arrêter un profil en cours d'exécution et interrompre la collecte des données, utilisez la touche

%SYS>do Stop^SystemPerformance(runid)

Pour arrêter le travail sans supprimer les fichiers journaux et produire un rapport de performance HTML à partir de ces fichiers journaux, vous pouvez également utiliser la méthode suivante

%SYS>do Stop^SystemPerformance(runid, 0)

8. Vérifier les performances en comptant les globales

Nous pouvons utiliser la méthode de classe suivante, qui renvoie le nombre de références globales effectuées par un processus donné : ##class(%SYSTEM.Process).GlobalReferences($JOB)

Pour surveiller les performances, nous pouvons exécuter cette méthode de classe au début et à la fin du processus afin de vérifier le nombre d'accès globaux au cours de l'exécution de ce processus. Plus le nombre d'accès globaux est élevé, plus le processus est lent.

Conclusion

Au terme de ce voyage, j'espère que vous avez trouvé ces informations utiles pour améliorer les performances de vos applications. N'hésitez pas à mettre en œuvre ces conseils et à constater l'impact positif sur vos systèmes. Pour approfondir ces stratégies et découvrir d'autres idées précieuses en matière d'amélioration des performances, consultez notre documentation en ligne complète. Nous vous remercions de votre participation à cette exploration et souhaitons que vos applications continuent à prospérer sur la plate-forme de données IRIS.

 

Autres documents sur l'amélioration des performances : (Merci à @Vitaliy Serdtsev et @Benjamin De Boe )

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer