EXPLIQUER la redistribution des données pour les plans de requêtes Amazon Redshift - AWS Conseils prescriptifs

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

EXPLIQUER la redistribution des données pour les plans de requêtes Amazon Redshift

Au cours des étapes de jointure, une tranche peut avoir besoin de fonctionner avec des données qui ne sont pas stockées localement, et la transmission réseau (déplacement des données entre les nœuds de calcul) est l'opération de requête la plus coûteuse.

La EXPLAIN sortie pour les jointures spécifie également une méthode de déplacement des données dans un cluster afin de faciliter la jointure. Ce mouvement des données peut être une diffusion ou une redistribution.

  • Dans une diffusion, les valeurs de données d’un côté d’une jointure sont copiées à partir de chaque nœud de calcul dans tous les autres nœuds de calcul, afin que chaque nœud de calcul se retrouve avec une copie complète des données.

  • Dans une redistribution, les valeurs de données participantes sont envoyés de leur tranche actuelle vers une nouvelle tranche (éventuellement sur un autre nœud). Les données sont généralement redistribuées pour correspondre à la clé de distribution de l’autre table participant à la jointure si cette clé de distribution est l’une des colonnes de jointure. Si aucune des tables ne dispose de clés de distribution sur l’une des tables de jointure, les deux tables sont distribuées ou la table interne est diffusée à chaque nœud.

La EXPLAIN sortie fait également référence aux tables internes et externes.

  • La table interne est d'abord scannée et apparaît en bas du plan de requête. La table interne est la table dont les lignes correspondantes sont recherchées dans la table de construction. Habituellement, une table interne conservée en mémoire est la table source pour le hachage et, si possible, la plus petite des deux tables jointes.

  • La table externe est la source des lignes à mettre en correspondance avec la table interne et est généralement lue depuis le disque. L'optimiseur de requêtes choisit la table interne et externe en fonction des statistiques de base de données issues de la dernière exécution de la ANALYZE commande. L'ordre des tables dans la FROM clause d'une requête ne détermine pas quelle table est interne et laquelle est externe.

Utilisez les attributs suivants dans les plans de requête pour identifier la manière dont les données sont déplacées afin de simplifier une requête :

  • DS_BCAST_INNER — Indique qu'une copie de l'intégralité de la table de jointure interne est diffusée à tous les nœuds de calcul.

  • DS_DIST_ALL_NONE — Aucune redistribution n'est requise car la table interne a déjà été distribuée à tous les nœuds utilisateurs. DISTSTYLE ALL La table complète se trouve sur chaque nœud de calcul.

  • DS_DIST_NONE — Aucune redistribution n'est requise car les tranches correspondantes sont colocalisées sur les nœuds de calcul. Il s'agit de l'option la plus efficace car il n'y a pas de transfert réseau.

  • DS_DIST_INNER — Indique que la table de jointure interne est redistribuée. Si le tableau interne est beaucoup plus petit ou peu mis à jour, envisagez de le remplacer par. DISTSTYLE ALL

  • DS_DIST_OUTER — Indique que la table de jointure externe est redistribuée. Si le tableau extérieur est beaucoup plus petit ou peu mis à jour, envisagez de le remplacer par. DISTSTYLE ALL

  • DS_DIST_ALL_INNER — Indique que la table de jointure interne est envoyée à un seul nœud parce que la table de jointure l'utilise. DISTSTYLE ALL Cette jointure est exécutée sur un seul nœud et risque d'être lente.

  • DS_DIST_BOTH — Indique que les deux tables de la jointure sont redistribuées à tous les nœuds. C'est la pire option possible.