(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
Azure Synapse Analytics
Azure Synapse Analytics 1 min

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.

Partilhar: