27
Indices columnares en SQL Server 2012 Enrique Puig DPE – Motor Relacional MAP 2012 – MCPIT SQL Server [email protected] Javier Loria Mentor – Motor Relacional & BI De todo! Es una máquina ! [email protected]

Indices columnares | SolidQ Summit 2012

  • Upload
    solidq

  • View
    179

  • Download
    10

Embed Size (px)

Citation preview

Page 1: Indices columnares | SolidQ Summit 2012

Indices columnares en SQL Server 2012

Enrique Puig DPE – Motor Relacional MAP 2012 – MCPIT SQL Server

[email protected]

Javier Loria Mentor – Motor Relacional & BI De todo! Es una máquina !

[email protected]

Page 2: Indices columnares | SolidQ Summit 2012

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?

Page 3: Indices columnares | SolidQ Summit 2012

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?

Page 4: Indices columnares | SolidQ Summit 2012

Introducción

Arquitectura

idVenta Producto cantidad Precio

1 Camisa 2 49.99

2 Jersey 3 60.00

3 Zapatos 4 224.75

4 Pantalón 1 35.00

5 Camisa 1 60.00

6 Jersey 4 180.00

7 Zapatos 6 315.50

8 Pantalón 1 48.75

Tabla

Data page 1

1 camisa 49.99 2

2 Jersey 60.00 3

3 Zapatos 224.75 4

4 Pantalón 35.00 1

Data page 2

1 camisa 60.00 1

2 Jersey 180.00 4

3 Zapatos 315.50 6

4 Pantalón 48.75 1

idventa Producto

1

2

3

4

5

6

7

8

Cantidad Precio

camisa

Jersey

Zapatos

Pantalón

camisa

Jersey

Zapatos

Pantalón

2

3

4

1

1

4

6

1

49.99

60.00

224.75

35.00

60.00

180.00

315.50

48.75

Segmentos

XVelocity

Page 5: Indices columnares | SolidQ Summit 2012

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?

Page 6: Indices columnares | SolidQ Summit 2012

Claves de rendimiento

Almacenamiento en filas

Memoria Disco

Data page 1

1 camisa 49.99 2

2 Jersey 60.00 3

3 Zapatos 224.75 4

4 Pantaló

n 35.00 1

Data page 2

1 camisa 60.00 1

2 Jersey 180.00 4

3 Zapatos 315.50 6

4 Pantaló

n 48.75 1

Data page 1

1 camisa 49.99 2

2 Jersey 60.00 3

3 Zapatos 224.75 4

4 Pantalón 35.00 1

Data page 2

1 camisa 60.00 1

2 Jersey 180.00 4

3 Zapatos 315.50 6

4 Pantalón 48.75 1

Select

idVenta,

Precio

From Tabla

Page 7: Indices columnares | SolidQ Summit 2012

Claves de rendimeinto

Índices columnares

Memoria Disco Select

idVenta,

Precio

From Tabla idventa Producto

1

2

3

4

5

6

7

8

Cantidad Precio

camisa

Jersey

Zapatos

Pantalón

camisa

Jersey

Zapatos

Pantalón

2

3

3

1

5

6

7

8

49.99

60.00

224.75

35.00

49.99

60.00

224.75

35.00

1

2

3

4

5

6

7

8

49.99

60.00

224.75

35.00

49.99

60.00

224.75

35.00

Page 8: Indices columnares | SolidQ Summit 2012

DEMO Rendimiento de índices columnares

Page 9: Indices columnares | SolidQ Summit 2012

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

Page 10: Indices columnares | SolidQ Summit 2012

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()

Page 11: Indices columnares | SolidQ Summit 2012

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 Filas 20M Filas 500 Filas 500 Filas

Page 12: Indices columnares | SolidQ Summit 2012

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…

Page 13: Indices columnares | SolidQ Summit 2012

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 Filas 20M Filas 500 Filas 500 Filas

Page 14: Indices columnares | SolidQ Summit 2012

DEMO Fast Batch Mode

- Row mode vs. Batch mode performance

- Operators que no implementan batch mode

Page 15: Indices columnares | SolidQ Summit 2012

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

Page 16: Indices columnares | SolidQ Summit 2012

Decimal y/o numeric (precision >18)

Datetimeoffset (precision > 2)

Binary, Varbinary

Image

Text, ntext

Varchar(max), nvarchar(max)

HierarchyID

Timestamp

Uniqueidentifier

Sqlvariant

xml

Restricciones

Tipos de datos

Page 17: Indices columnares | SolidQ Summit 2012

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

Page 18: Indices columnares | SolidQ Summit 2012

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

Page 19: Indices columnares | SolidQ Summit 2012

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

Page 20: Indices columnares | SolidQ Summit 2012

Técnicas de carga

Deshabilitando/Habilitando el índice

1 • Deshabilitar el índice

2 • Insertar/borrar/modificar datos

3 • Reconstruir el índice

Page 21: Indices columnares | SolidQ Summit 2012

DEMO Habilitando/deshabilitando el índice

Page 22: Indices columnares | SolidQ Summit 2012

Técnicas de carga

Particionado de datos

1 • Crear tabla intermedia

2 • Insertar datos

3 • Crear índice columnar

4 • SWITCH a una partición vacía

Page 23: Indices columnares | SolidQ Summit 2012

DEMO Particionado de datos

Page 24: Indices columnares | SolidQ Summit 2012

Técnicas de carga

Hibrido: Tabla + Vista

Tabla

Normal

Tabla

Columnar

SYNC Vista

Page 25: Indices columnares | SolidQ Summit 2012

DEMO Pruebas en escenarios reales

Page 26: Indices columnares | SolidQ Summit 2012

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

Page 27: Indices columnares | SolidQ Summit 2012

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: