En la vida real, columnstore puede aplicar bien o mal. En esta sesión veremos qué podemos hacer para conseguir un verdadero real-time operational analytics en nuestros entornos OLTP.
2. Ingeniero Informático
Microsoft Data Platform MVP
Mentor en SolidQ
Tuning y alta disponibilidad
Enrique Catalá Bañuls
ecatala@solidq.com
@enriquecatala
3. Real-time operational analytics
Entorno donde conviven cargas mixtas OLAP y OLTP
Mínimo impacto de usuarios de negocio atacando el
operacional
5. Real-time operational analytics
IIS Server
OLTP workload
Esto no reemplaza la
necesidad de entorno BI
No hay nada mas rápido que un cubo con
datos precalculados
Tampoco te va a ayudar cuando necesitas
análisis de multiples fuentes de datos
6. Columnstore
ROWSTORE
• Formato de fila
• Compresión opcional
• Devuelve todas las columnas del índice
• Arbol B balanceado
COLUMNSTORE
• Formato de columna
• Compresión requerida
• Devuelve solo las columnas referenciadas
• Cabecera y datos
8. Diferencias row-store vs columnstore
GetNext()
• Envia datos a la
CPU
• Implementado por
todos los
operadores
Row Mode
• Invocaciones
GetNext() fila a fila
• El habitual en OLTP
Batch Mode
• Invocaciones
GetNext() por ~900
filas
• Beneficios 10x-100x
• Requiere
columnstore
9. Carga de datos
• Carga sin preorden (PON ORDER BY!)
• batch_size
• >102400 directos a rowgroup
• <102400 carga a delta store (mal)
• Usa SIEMPRE bulk load sin TABLOCK
• Siempre minimamente logeado
• Soporta multithread
• NO PONGAS TABLOCK
10. Carga de datos
• Rowgroups pueden tener
• Desde 102.400
• Hasta 1.048.576
• Recuerda cargar con bulk insert….
• INSERT INTO <table-name> VALUES
(<set of values>) siempre inserta a
delta store
Rows to Bulk Load
Rows Added to the
Compressed Rowgroup
Rows
Added to
the Delta
Rowgroup
102,000 0 102,000
145,000 145,000
Rowgroup size: 145,000
0
1,048,577 1,048,576
Rowgroup size: 1,048,576.
1
2,252,152 2,252,152
Rowgroup sizes: 1,048,576,
1,048,576, 155,000.
0
12. AlwaysOn y columnstore
Aspectos clave
Se separa por tipología de carga, de forma que las
consultas analíticas aprovechen todavía major el
almacenamiento columnar
AlwaysOn Availability GroupCarga de trabajo
OLTP
Carga de trabajo
analítica
13. Tablas candidatas óptimas para NCCIs
+1M filas
Sufren muchas consultas
de agregados
Con múcho table scan
Con muchas columnas
• Mínimo para activarse
• analíticas
• Mucha casuística
• Dificiles índices
cobertura
14. Truco: Non-clustered columnstore index (NCCI)
B-tree index
Delta rowgroups
Non-clustered columnstore index
Deletebitmap
B-tree index • Actualizable desde SQL 2016
• No necesitas ningun otro índice para OLAP
• Se mantiene como cualquier índice
• No require cambios de aplicación
• Pueden ser filtrados
15. Truco: Compression delay
B-tree index
HOT
Delta
rowgroups
Non-clustered columnstore index
Deletebitmap
Control del tiempo de permanencia en delta:
-Max = 10080 (7 dias)
-Util for HOT/WARM (time based)
• < 6 hours – HOT (delta store)
OLTP workload
16. Demo
¿es buena idea migrar a SQL Server 2016+?
¿Diferencias entre standard y Enterprise?
17. Mantenimiento
Reorganize
Borra físicamente de un rowgroup si
>10% borrado lógico
Combina uno o dos compressed
rowgroups hasta 1024576 filas
WITH
(COMPRESS_ALL_ROW_GROUPS)
Rebuild
Re-comprime todo
Bloquea la tabla
• 2017 with online en NCCI
Útil con elevada fragmentacion
18. Feature comparison
Columnstore Index Feature
SQL
Server
2012 (11.x)
SQL
Server
2014 (12.x)
SQL
Server
2016 (13.x)
SQL
Server
2017 (14.x)
SQL
Database
SQL Data
Warehouse
Batch execution for multi-threaded queries yes yes yes yes yes yes
Batch execution for single-threaded queries yes yes yes yes
Archival compression option yes yes yes yes yes
Snapshot isolation and read-committed snapshot isolation yes yes yes yes
Specify columnstore index when creating a table yes yes yes yes
Always On supports columnstore indexes yes yes yes yes yes yes
Always On readable secondary supports read-only nonclustered columnstore index yes yes yes yes yes yes
Always On readable secondary supports updateable columnstore indexes yes yes
Read-only nonclustered columnstore index on heap or B-tree yes yes yes 1 yes 1 yes 1 yes 1
Updateable nonclustered columnstore index on heap or B-tree yes yes yes yes
Additional B-tree indexes allowed on a heap or B-tree that has a nonclustered columnstore index yes yes yes yes yes yes
Updateable clustered columnstore index yes yes yes yes yes
B-tree index on a clustered columnstore index yes yes yes yes
Columnstore index on a memory-optimized table yes yes yes yes
Nonclustered columnstore index definition supports using a filtered condition yes yes yes yes
Compression delay option for columnstore indexes in CREATE TABLE and ALTER TABLE yes yes yes yes
Columnstore index can have a non-persisted computed column yes
1 To create a read-only nonclustered columnstore index, store the index on a read-only filegroup.
La mayoria de
features requieren
compatibility level
130 (no vale con
estár en SQL Server
2016)
19. Resumen
Grandes volúmenes de datos
• Bloques mínimos de 1M filas
Elevada compression
Lectura minima de datos
Optimiza cache L2