Lorsqu'un nœud unique de stockage en colonnes en lecture seule ne suffit plus à traiter les requêtes analytiques volumineuses (volume de données, complexité des requêtes ou concurrence des analyses de tables OSS), le traitement massivement parallèle (MPP) multi-nœud permet une mise à l'échelle horizontale par l'ajout de nœuds de stockage en colonnes en lecture seule. L'optimiseur In-Memory Column Index (IMCI) répartit automatiquement les requêtes éligibles sur tous les nœuds du groupe d'exécution. Cela augmente les ressources CPU et le débit d'E/S disponibles sans modifier vos requêtes SQL.
Fonctionnement
Le MPP multi-nœud constitue un groupe d'exécution composé de plusieurs nœuds de stockage en colonnes en lecture seule. Pour chaque instruction SQL entrante, l'optimiseur IMCI détermine s'il doit l'exécuter sur un seul nœud ou la distribuer au sein du groupe.
Cet optimiseur identifie précisément la méthode de traitement transactionnel (TP) des instructions SQL. Il choisit ensuite entre une exécution mono-nœud et une exécution parallèle multi-nœud pour les charges de travail analytiques (AP) importantes.
Cas d'usage
Exploitez les capacités de mise à l'échelle du MPP multi-nœud pour augmenter les ressources CPU et les IOPS alloués aux requêtes, afin de réduire la latence.
Mettez en œuvre un traitement des requêtes en mémoire en les distribuant sur plusieurs nœuds pour obtenir un débit supérieur.
Prérequis
Avant d'activer le MPP multi-nœud, assurez-vous que votre cluster répond aux exigences suivantes :
Un cluster PolarDB for MySQL Enterprise Edition
Version 8.0.1, révision 8.0.1.1.38 ou ultérieure
Au moins un nœud de stockage en colonnes en lecture seule ajouté au cluster. Pour plus d'informations, consultez Ajouter un nœud IMCI en lecture seule.
Activer le MPP multi-nœud
Pour activer et configurer le MPP multi-nœud, rejoignez le groupe DingTalk (ID : 27520023189) afin d'obtenir une assistance technique.
Bonnes pratiques
Clés de partitionnement
PolarDB prend en charge les partitions de niveau 1 et de niveau 2 via les stratégies de partitionnement HASH ou KEY. Le MPP multi-nœud repose sur une architecture « share-nothing » où chaque partition est attribuée à un seul nœud. Cela implique que :
Chaque nœud met en cache uniquement ses propres partitions, ce qui optimise l'utilisation de la mémoire.
Les opérations
JOINetGROUP BYportant sur les clés de partitionnement sont traitées localement sur chaque nœud, ce qui élimine les transferts de données inter-nœuds.
Pour tirer parti de cette architecture :
Créez des partitions HASH ou KEY de niveau 1 ou 2 sur les colonnes les plus fréquemment utilisées dans les requêtes
JOINetGROUP BY.Maintenez un nombre de partitions identique pour toutes les tables HASH et KEY. Si deux tables possèdent un nombre de partitions différent, les opérations
JOINentre celles-ci nécessitent des transferts de données inter-nœuds et ne peuvent pas être traitées localement.Privilégiez un grand nombre premier comme nombre de partitions afin de réduire la distribution inégale des données et d'améliorer l'utilisation des ressources.
Clés de tri
Pour les requêtes filtrant de grands volumes de données, créez des partitions RANGE ou ajoutez des clés de tri au stockage en colonnes. Appliquez ces partitions RANGE et clés de tri aux colonnes présentes dans les prédicats de la clause WHERE.
Par exemple, pour la condition de requête WHERE date > '2024-10-01' AND date < '2024-10-07' AND customer_id = 'X231' :
Créez des partitions RANGE sur la colonne
datepour ignorer des plages entières de partitions lors de l'analyse.Ajoutez des clés de tri IMCI sur la colonne
customer_idafin d'éviter le parcours des segments de lignes ne correspondant pas au prédicat.
La combinaison de ces techniques réduit le volume de données à analyser et améliore le temps de réponse des requêtes. Pour plus d'informations, consultez Présentation d'IMCI et Configurer les clés de tri pour les index columnstore.
Vérifier l'utilisation du MPP multi-nœud
La vérification de l'utilisation du MPP s'effectue en deux étapes : déterminez d'abord si une requête est compatible avec le MPP, puis vérifiez si l'optimiseur a effectivement sélectionné ce mode d'exécution.
Étape 1 : Vérifier la compatibilité d'une requête avec le MPP
Ajoutez l'indicateur SET_VAR(imci_plan_use_mpp=forced) pour forcer l'optimiseur à générer un plan d'exécution MPP. Si le plan résultant contient un opérateur Exchange, la requête prend en charge l'exécution MPP multi-nœud.
EXPLAIN SELECT /*+ SET_VAR(imci_plan_use_mpp=forced) */ COUNT(*) FROM nation;
Exemple de sortie :
+----+----------------------------+--------+---------------------------------------------------------------------------------+
| ID | Operator | Name | Extra Info |
+----+----------------------------+--------+---------------------------------------------------------------------------------+
| 1 | Select Statement | | IMCI Execution Plan (max_dop = 11, max_query_mem = 37438953472) |
| 2 | └─Compute Scalar | | |
| 3 | └─Aggregation | | |
| 4 | └─Consume | | Consume ProducerPipeId: 1 |
| 5 | └─Exchange | | PipeId: 1, Consumers: 23377031, Producers: 23377031,23377032, Part Type: Gather |
| 6 | └─Aggregation | | |
| 7 | └─Table Scan | nation | |
+----+----------------------------+--------+---------------------------------------------------------------------------------+
La présence de l'opérateur Exchange à la ligne 5 confirme que la requête peut s'exécuter en parallèle sur plusieurs nœuds.
Étape 2 : Vérifier le choix automatique du MPP par l'optimiseur
Une fois confirmé qu'une instruction SQL peut bénéficier du MPP multi-nœud, examinez son plan d'exécution pour vérifier si ce mode sera effectivement utilisé. La présence de l'opérateur Exchange dans le plan indique que l'instruction SQL sera exécutée en parallèle via le MPP multi-nœud.
Résultats des tests de performance
Pour consulter les résultats des benchmarks selon différentes configurations de nœuds, reportez-vous à Performances IMCI.