Dedicated SQL Pool no Synapse: distribuição de dados e optimização
João Barros
19 de February de 2025
1 min de leitura
O Dedicated SQL Pool (anteriormente SQL DW) usa MPP (Massively Parallel Processing) com 60 nós de distribuição. A escolha de como distribuir cada tabela pelos 60 nós define directamente a performance de joins e agregações.
Tipos de distribuição
HASH — distribui linhas por hash de uma coluna
✓ Ideal para tabelas de factos grandes
✗ Péssimo se a coluna tiver poucos valores únicos (data skew)
ROUND_ROBIN — distribui uniformemente sem critério
✓ Bom para tabelas de staging temporárias
✗ Causa movimento de dados em joins
REPLICATE — copia a tabela inteira em cada nó
✓ Ideal para dimensões pequenas (< 2GB)
✗ Alto custo de escrita e actualização
Criar tabelas com distribuição adequada
-- Tabela de factos grande → HASH pela chave de join mais frequente
CREATE TABLE dbo.FactVendas (
id_venda BIGINT NOT NULL,
id_cliente INT NOT NULL,
data_venda DATE NOT NULL,
receita DECIMAL(18,2)NOT NULL
)
WITH (
DISTRIBUTION = HASH(id_cliente),
CLUSTERED COLUMNSTORE INDEX
);
-- Dimensão pequena → REPLICATE
CREATE TABLE dbo.DimProduto (
id_produto INT NOT NULL,
nome VARCHAR(200)NOT NULL,
categoria VARCHAR(100)
)
WITH (
DISTRIBUTION = REPLICATE,
CLUSTERED COLUMNSTORE INDEX
);
Diagnosticar data skew
-- Ver distribuição de linhas pelos 60 nós
DBCC PDW_SHOWSPACEUSED('dbo.FactVendas');
-- Se um nó tem 10x mais linhas → escolha má coluna de hash
-- Solução: mudar para outra coluna ou usar ROUND_ROBIN + pré-agrupamento
Statistics e cache de resultados
-- Criar statistics (essencial para o optimizador)
CREATE STATISTICS stats_cliente ON dbo.FactVendas(id_cliente);
-- Activar result set caching (queries idênticas = zero custo)
ALTER DATABASE SynapseDW SET RESULT_SET_CACHING ON;
Conclusão
No Dedicated SQL Pool, a arquitectura vem primeiro: distribua factos por hash na coluna de join, replique dimensões pequenas e crie statistics em todas as colunas usadas em joins e filtros. Estas três regras resolvem 80% dos problemas de performance.