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.

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.

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.

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