SolidQ Summit http://summit.solidq.com
Con SQL Server 2012 tenemos la posibilidad de crear un nuevo tipo de índices para mejorar el rendimiento de forma exponencial ante consultas que involucran un elevado trasiego de información. En esta sesión, hablaremos en detalle de los nuevos índices columnares, qué nos aportan y para qué tipo de escenarios nos van a resultar beneficiosos.
1. Indices columnares en SQL Server 2012
Enrique Puig
DPE – Motor Relacional
MAP 2012 – MCPIT SQL Server
epuig@solidq.com
Javier Loria
Mentor – Motor Relacional & BI
De todo! Es una máquina !
jloria@solidq.com
2. Introducción
Arquitectura
Claves de rendimiento
Restricciones
Escenarios factibles
Datawharehouse
Secundarios de reporte
Escritura y uso
Deshabilitando índices
Híbrido: Tabla + Vista
Particionado de datos
Conclusiones
Preguntas
Agenda
¿Qué vamos a ver hoy?
3. Objetivo: Acelerar consultas sobre grandes volúmenes de
datos.
Nuevo tipo de índice
No es un índice (no es un árbol)
No tiene clave y no permite seeks ni scan range
Solo permite escaneos
Nuevo tipo de almacenamiento
Filas vs. Columnas
Xvelocity
Almacenamiento columnar
Algoritmos de compresión
Memoria
Fast batch mode
Introducción
¿Que son los índices columnares?
5. Almacenamiento columnar
Consultas especifican qué columnas quieren
Ratios de compresión Elevados ELEVADISIMOS!!!
Compresiones 10x
Disminuye el número de lecturas
Maximización de la memoria
Solo columnas deseadas
Altamente comprimidas
Maximización del paralelismo
Fast batch mode
Claves de rendimiento
¿Por qué va tan rápido?
6. Claves de rendimiento
Almacenamiento enfilas
MemoriaDisco
Data page 1
1 camisa 49.992
2 Jersey 60.003
3 Zapatos 224.754
4
Pantaló
n
35.001
Data page 2
1 camisa 60.001
2 Jersey 180.004
3 Zapatos 315.506
4
Pantaló
n
48.751
Data page 1
1 camisa 49.992
2 Jersey 60.003
3 Zapatos 224.754
4 Pantalón 35.001
Data page 2
1 camisa 60.001
2 Jersey 180.004
3 Zapatos 315.506
4 Pantalón 48.751
Select
idVenta,
Precio
From Tabla
9. Nuevo modo de procesamiento
Modo “Batch”
Hasta ahora -> Row by Row
Modo “Row”
Aprovecha el paralelismo
Consigue muy buenos tiempos
Solo funciona con planes paralelos
Solo se usa con índices columnares
Solo consultas que realizan:
Cruces (JOIN)
Filtros (WHERE)
Agregaciones (GROUP BY)
Claves de rendimiento
Fast batch Mode
10. Modo de procesamiento actual
Válido para sistemas OLTP
Se supone poco análisis
Escaneos de pocas filas
Operaciones seek
Llama a la función GetNextRow()
Árbol de llamadas
Procesamiento Fila a Fila
GetNextRow() GetNextRow()
GetNextRow()
11. Ejemplo
Consulta analítica más intensa
Productos más vendidos
Tabla ventas: 20 Millones de filas
20M + 20M + 500 + 500 = 40.001.000 llamadas
Impacto en rendimiento
Procesamiento Fila a Fila
¿Y para grandes volúmenes de datos?
GetNextRow()
GetNextRow() GetNextRow() GetNextRow()
20M Filas20M Filas500 Filas
500 Filas
12. Procesamos “batches” de filas
1000 filas aprox.
No todos operadores implementan el modo batch
Conversiones
Batch -> Row
Row -> Batch
Planes de ejecución mixtos
Parte en batch y parte en Row
Mejor rendimiento a mayor parte procesada en batch
Cuidado con operadores
OUTER JOIN, IN / NOT IN, EXISTS / NOT EXISTS, DISTINCT
Fast batch mode
SQL Server vuela…
13. Ejemplo
Consulta analítica más intensa
Productos más vendidos
Tabla ventas: 20 Millones de filas
20M /1000 filas = 2000 * 2= 4000 llamadas
4000 + (500+500) = 5000 llamadas
40M / 5000 = 8000 veces menos en llamadas
Mejora el rendimiento
Fast Batch mode
¿Y para grandes volúmenes de datos?
GetNextRow()
GetNextRow() GetNextRow() GetNextRow()
20M Filas20M Filas500 Filas
500 Filas
14. DEMO
Fast Batch Mode
- Row mode vs. Batch mode performance
- Operators que no implementan batch mode
15. Batch mode vs. Row Mode y paralelismo
184
3423
7264
11918
0 2000 4000 6000 8000 10000 12000 14000
Columnstore
Sin columnstore
Duration (ms)
Comparacion rendimiento consulta
No paralelo
paralelo
17. 1 único indice columnar
No puede ser clustered
No aplica a vistas indexadas
No se pueden filtrar
1024 columnas como máximo
Convierten tablas en modo lectura
INSERT, UPDATE, DELETE y MERGE no funcionan
No resulta factible para sistemas OLTP
Restricciones
Limitaciones de tabla
18. Grandes volúmenes de datos
Sistemas orientados al análisis
Escrituras incrementales
Cargas de datos de distintos orígenes
ETL
Idealmente no hay modificaciones
Versionado de los hechos
Mayoría de las operaciones son de lectura
Consultas TSQL
Reportes
Cargas de cubos
Consultas directas de cubos
ROLAP
DirectQuery
Escenarios donde encaja
DataWharehouse
19. Servidores OLTP
Tablas Sumarizadas
Mantenimiento de tablas con índices columnares
Ventana de mantenimiento (8x5)
Sincronización
Depende del negocio
Servidores destinados a reporting
Descargan el sistema OLTP
Sistemas puramente transaccionales
Ejecutan
Todos los informes
Al menos los informes más pesados
Escenarios donde encaja
Reporting
26. Proporcionan muy buen rendimiento
Mas eficientes con Fast Batch mode
Descartados para aplicar directamente a tablas del OLTP
Más adecuado para
Servidores de reporting
Datawharehouse
Consultas ROLAP/Directquery
Estamos todavía en versión 1.0
¿Quién sabe si se eliminaran restricciones?
Conclusiones
27. Si quieres disfrutar de las mejores sesiones de
nuestros mentores de España y Latino América,
ésta es tu oportunidad.
http://summit.solidq.com/madrid/
Síguenos: