Como alterar as colunas de distribuição?
Em um banco de dados de armazém de dados, você precisa escolher cuidadosamente colunas de distribuição para tabelas grandes, pois elas podem afetar o desempenho do banco de dados e da consulta. Se uma chave de distribuição imprópria for usada, a distorção de dados poderá ocorrer após a importação dos dados. Como resultado, o uso de alguns discos será muito maior do que o de outros discos, e o cluster pode até se tornar somente leitura. Se a política de distribuição de hash for usada e ocorrer distorção de dados, o desempenho de I/O de alguns DNs será ruim, afetando o desempenho geral da consulta. A seleção adequada e o ajuste das colunas de distribuição são essenciais para o desempenho da consulta de tabela.
Se a política de distribuição de hash for usada, você precisará verificar as tabelas para garantir que seus dados sejam distribuídos uniformemente em cada DN. Geralmente, mais de 5% de diferença entre a quantidade de dados em diferentes DNs é considerada como distorção de dados. Se a diferença for superior a 10%, terá de escolher outra coluna de distribuição.
Para tabelas que não são distribuídas uniformemente, ajuste suas colunas de distribuição para reduzir a distorção de dados e evitar problemas de desempenho do banco de dados.
Escolher uma coluna de distribuição apropriada
A coluna de distribuição em uma tabela de hash deve atender aos seguintes requisitos, que são classificados por prioridade em ordem decrescente:
- Os valores da chave de distribuição devem ser discretos para que os dados possam ser distribuídos uniformemente em cada DN. Você pode selecionar a chave primária da tabela como a chave de distribuição. Por exemplo, para uma tabela de informações da pessoa, escolha a coluna número do cartão de identificação como a chave de distribuição.
- Não selecione a coluna onde existe um filtro constante.
- Selecione a condição de junção como a coluna de distribuição, para que as tarefas de junção possam ser enviadas para os DNs para serem executadas, reduzindo a quantidade de dados transferidos entre os DNs.
- Várias colunas de distribuição podem ser selecionadas para distribuir uniformemente os dados.
Procedimento
Execute a instrução select version(); para consultar a versão atual do banco de dados. O desempenho necessário varia de acordo com a versão.
- Para 8.0.x e versões anteriores, especifique a coluna de distribuição ao recriar uma tabela.
- Use Data Studio ou gsql no Linux para acessar o banco de dados.
- Crie uma tabela.
Nas instruções a seguir, table1 é o nome da tabela original e table1_new é o nome da nova tabela. column1 e column2 são nomes de colunas de distribuição.
1 2 3 4
CREATE TABLE IF NOT EXISTS table1_new ( LIKE table1 INCLUDING ALL EXCLUDING DISTRIBUTION) DISTRIBUTE BY HASH (column1, column2);
- Migre dados para a nova tabela.
1 2 3 4
START TRANSACTION; LOCK TABLE table1 IN ACCESS EXCLUSIVE MODE; INSERT INTO table1_new SELECT * FROM table1; COMMIT;
- Verifique se os dados da tabela foram migrados. Exclua a tabela original.
1 2
SELECT COUNT(*) FROM table1_new; DROP TABLE table1;
- Substitua a tabela original.
1
ALTER TABLE table1_new RENAME TO table1;