Distribuição de dados para otimização de consultas
Quando você carrega dados em uma tabela, o Amazon Redshift distribui as linhas da tabela para cada um dos nós de computação de acordo com o estilo de distribuição da tabela. Quando você executa uma consulta, o otimizador de consulta redistribui as linhas aos nós de computação conforme necessário para executar junções e agregações. O objetivo de escolher um estilo de distribuição de tabela é minimizar o impacto da etapa de redistribuição ao localizar os dados onde eles precisam estar antes que a consulta seja executada.
nota
Esta seção apresentará os princípios de distribuição de dados em um banco de dados do Amazon Redshift. Recomendamos que você crie suas tabelas com DISTSTYLE AUTO
. Se você fizer isso, o Amazon Redshift usará a otimização automática de tabela para escolher o estilo de distribuição de dados. Para obter mais informações, consulte Otimização automática de tabelas. O restante desta seção fornece detalhes sobre estilos de distribuição.
Tópicos
Conceitos de distribuição de dados
Seguem-se alguns conceitos de distribuição de dados para o Amazon Redshift.
Nós e fatias
Um cluster do Amazon Redshift é um conjunto de nós. Cada nó no cluster tem seu próprio sistema operacional, memória dedicada e armazenamento de disco dedicado. Um dos nós é o nó líder, que gerencia a distribuição de dados e tarefas de processamento de consultas aos nós de computação. Os nós de computação fornecem recursos para realizar essas tarefas.
O armazenamento de disco para um nó de computação é dividido em um número de fatias. O número de fatias por nó depende do tamanho do nó do cluster. Todos os nós participam da execução de consultas paralelas, trabalhando nos dados que são distribuídos da maneira mais uniforme possível pelas fatias. Para obter mais informações sobre o número de fatias que cada tamanho de nó possui, consulte “Clusters e nós no Amazon Redshift” no Guia de gerenciamento de clusters do Amazon Redshift.
Redistribuição de dados
Quando você carrega dados em uma tabela, o Amazon Redshift distribui as linhas da tabela para cada uma das fatias de nó de acordo com o estilo de distribuição da tabela. Como parte de um plano de consulta, o otimizador determina onde os blocos de dados precisam estar localizados para melhor executar a consulta. Então, os dados são movidos fisicamente, ou redistribuídos, enquanto a consulta é executada. A redistribuição pode envolver o envio de linhas específicas aos nós para junção ou a transmissão de uma tabela inteira para todos os nós.
A redistribuição de dados pode representar uma parcela substancial do custo de um plano de consulta e o tráfego de rede que ela gera pode afetar outras operações de banco de dados e retardar a performance geral do sistema. Na medida em que você antecipa onde melhor localizar os dados inicialmente, é possível minimizar o impacto da redistribuição de dados.
Metas da distribuição de dados
Quando você carrega dados em uma tabela, o Amazon Redshift distribui as linhas da tabela para os nós de computação e fatias de acordo com o estilo de distribuição que você escolheu ao criar a tabela. A distribuição de dados tem duas metas principais:
-
Para distribuir uniformemente o workload entre os nós no cluster. A distribuição desigual, ou desvio de distribuição de dados, força alguns nós a trabalhar mais do que outros, o que afeta a performance da consulta.
-
Para minimizar a movimentação de dados conforme uma consulta é executada. Se as linhas que participam de junções ou agregações já estão colocadas nos nós com suas linhas de junção em outras tabelas, o otimizador não precisa redistribuir tantos dados quando as consultas são executadas.
A estratégia de distribuição escolhida para seu banco de dados tem consequências importantes para a performance da consulta, requisitos de armazenamento, carregamento de dados e manutenção. Com a escolha do melhor estilo de distribuição para cada tabela, você pode equilibrar sua distribuição de dados e melhorar a performance geral do sistema.