Implémentation de fonctionnalités pour améliorer les performances

Contrôle de la parallélisation

Objective

After completing this lesson, you will be able to contrôlez la parallélisation.

Contrôle de la parallélisation dans un flux de données

SAP HANA Cloud tente toujours d'appliquer automatiquement la parallélisation aux requêtes afin d'optimiser les performances. Les bonnes pratiques de modélisation garantissent que les requêtes exécutées sur vos vues calculées ont la meilleure chance d'être mises en parallèle. Cependant, dans certains cas, l'optimiseur n'appliquera pas la parallélisation dans une étape de traitement des données complexe et de longue durée car il n'est pas en mesure de comprendre la sémantique de gestion et s'il est concerné, il pourrait casser les résultats s'il tentait de paralléliser. Il laisse donc l'étape de traitement séquentielle avec précaution, même si cela peut nuire aux performances.

Cependant, si vous êtes en mesure de vous assurer que l'étape peut être exécutée en parallèle en fractionnant les données en partitions sémantiques, vous pouvez indiquer quand la parallélisation doit avoir lieu.

Dans une vue de calcul, il est possible de forcer la parallélisation du traitement des données en définissant un indicateur Partition Local Execution pour marquer le début et la fin de la section d'un flux de données où la parallélisation est requise. La raison pour laquelle vous effectuez cette opération est d'améliorer les performances d'une vue de calcul en générant plusieurs threads de traitement à des positions spécifiques dans le flux de données où des goulots d'étranglement de performance peuvent survenir.

Capture d'écran d'un scénario de vue de Calcul. La première projection est utilisée pour décomposer les données en partitions en fonction de l'attribut Pays. La deuxième projection, appelée Currency_convert_In_Parallel exécute un processus sur trois partitions différentes correspondant aux trois valeurs Pays : Inde, France et Islande. Un nœud d'union est ensuite utilisé pour fusionner les données ensemble.

Le bloc de parallélisation commence par un nœud de vue de calcul capable de définir une table comme source de données. Ce nœud peut être un nœud de projection ou un nœud d'agrégation. Il n'est pas possible d'utiliser un autre type de source de données tel qu'une fonction ou une vue.

Dans les Propriétés du nœud de départ sélectionné, un indicateur Partition Local Execution est activé pour signaler que plusieurs threads doivent être générés à partir de ce point. Il est possible de définir une colonne source comme valeur de partitionnement. Cela signifie qu'une partition est créée pour chaque valeur distincte de la colonne sélectionnée. Par exemple, si la colonne choisie était PAYS, un thread de traitement est créé pour chaque pays. Bien sûr, il est judicieux de rechercher des colonnes de partitionnement où les données peuvent être réparties équitablement. La colonne de partitionnement est facultative. Si elle n'est pas sélectionnée, le partitionnement défini pour la table est utilisé.

Si vous ne définissez pas explicitement la colonne de partitionnement, les règles de partitionnement de la table sous-jacente sont appliquées (en supposant que la table est partitionnée).

Pour terminer le bloc de parallélisation, vous utilisez un nœud d'union. Cependant, contrairement à un nœud d'union normal qui aurait toujours au moins deux sources de données, une union utilisée pour terminer le bloc de traitement parallèle est fournie uniquement à partir d'une source de données. Le nœud d'union combine les multiples threads générés, mais les entrées multiples ne sont pas visibles dans l'éditeur graphique et le nœud d'union semble donc avoir une seule source du nœud ci-dessous. Vous ne pouvez pas combiner d'autres sources de données dans le nœud d'union utilisé pour interrompre la parallélisation. Dans les Propriétés du nœud d'union, un indicateur Partition Local Execution est activé pour signaler la fin du bloc de parallélisation.

Capture d'écran des scénarios de Vue de calcul illustrant les restrictions dans l'utilisation de la parallélisation. Voir le texte après l'image pour plus de détails.

Vous devez tenir compte de certaines restrictions.

Le bloc de parallélisation commence toujours par un nœud qui inclut une source de données qui doit être une table. Vous pouvez utiliser une table définie dans le conteneur local ou un synonyme qui pointe vers une table externe. Vous ne pouvez pas utiliser une autre vue de calcul comme source de données ou fonction tabulaire.

Capture d'écran des scénarios de Vue de calcul illustrant les restrictions dans l'utilisation de la parallélisation. Voir le texte après l'image pour plus de détails.

Un seul bloc de parallélisation peut être défini par requête. Cela signifie que vous ne pouvez pas arrêter et démarrer un autre bloc dans la même vue de calcul ou dans toutes les vues calculées de la pile complète. Vous ne pouvez pas imbriquer des blocs de parallélisation, par exemple, lancer un bloc de parallélisation, puis en lancer un autre dans le bloc de parallélisation d'origine.

Il est possible de créer plusieurs nœuds de départ dans un seul bloc de parallélisation en sélectionnant différentes colonnes de partitionnement pour chaque nœud de départ. Si vous créez plusieurs nœuds de début, tous les threads qui ont été générés sont combinés dans un seul nœud d'union final.

Remarque

En plus de définir des partitions logiques à l'aide de cette technique, n'oubliez pas que SAP HANA tentera d'appliquer une parallélisation supplémentaire aux partitions logiques.

Pour contrôler le partitionnement des données, vous pouvez définir une colonne calculée dans le bloc de parallélisation avec l'expression du moteur de colonne simple partitionid(). Dans le jeu de données qui en résulte, vous verrez alors un numéro de partition généré pour chaque thread de traitement.

Autres techniques de surveillance de la parallélisation :

  • Vous pouvez également collecter des informations de traçage en ajoutant WITH PARAMETERS ('PLACEHOLDER' = ('$$CE_SUPPORT$$','')) à la fin de l'instruction de requête.

  • Utilisez l'analyseur SQL pour accéder aux nœuds qui doivent être mis en parallèle et vous devez voir que les nœuds sont dupliqués en fonction du nombre de partitions.

Attention

Il est important de ne pas surutiliser cette fonctionnalité car le parallélisation excessive peut entraîner de mauvaises performances globales lorsque d'autres processus sont affectés.