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

Dedicated SQL Pool en Synapse: distribución de datos y optimización

João Barros 19 de February de 2025 1 min de lectura

El Dedicated SQL Pool (anteriormente SQL DW) usa MPP (Massively Parallel Processing) con 60 nodos de distribución. Cómo distribuye cada tabla entre los 60 nodos define directamente el rendimiento de joins y agregaciones.

Tipos de distribución

HASH — distribuye filas por hash de una columna
  ✓ Ideal para tablas de hechos grandes
  ✗ Pésimo si la columna tiene pocos valores únicos (data skew)

ROUND_ROBIN — distribuye uniformemente sin criterio
  ✓ Bueno para tablas de staging temporales
  ✗ Causa movimiento de datos en joins

REPLICATE — copia la tabla entera en cada nodo
  ✓ Ideal para dimensiones pequeñas (< 2GB)
  ✗ Alto coste de escritura y actualización

Crear tablas con la distribución adecuada

-- Tabla de hechos grande → HASH por la clave de join más frecuente
CREATE TABLE dbo.FactVentas (
    id_venta    BIGINT       NOT NULL,
    id_cliente  INT          NOT NULL,
    fecha_venta DATE         NOT NULL,
    ingresos    DECIMAL(18,2)NOT NULL
)
WITH (
    DISTRIBUTION = HASH(id_cliente),
    CLUSTERED COLUMNSTORE INDEX
);

-- Dimensión pequeña → REPLICATE
CREATE TABLE dbo.DimProducto (
    id_producto  INT         NOT NULL,
    nombre       VARCHAR(200)NOT NULL,
    categoria    VARCHAR(100)
)
WITH (
    DISTRIBUTION = REPLICATE,
    CLUSTERED COLUMNSTORE INDEX
);

Diagnosticar data skew

-- Ver la distribución de filas entre los 60 nodos
DBCC PDW_SHOWSPACEUSED('dbo.FactVentas');

-- Si un nodo tiene 10x más filas → mala elección de columna de hash
-- Solución: cambiar a otra columna o usar ROUND_ROBIN + pre-agrupamiento

Statistics y cache de resultados

-- Crear statistics (esencial para el optimizador)
CREATE STATISTICS stats_cliente ON dbo.FactVentas(id_cliente);

-- Activar result set caching (consultas idénticas = coste cero)
ALTER DATABASE SynapseDW SET RESULT_SET_CACHING ON;

Conclusión

En el Dedicated SQL Pool, la arquitectura viene primero: distribuya los hechos por hash en la columna de join, replique las dimensiones pequeñas y cree statistics en todas las columnas usadas en joins y filtros. Estas tres reglas resuelven el 80% de los problemas de rendimiento.

Compartir: