Successfully reported this slideshow.
MS SQL Server 2014
In Memory ColumnStore Indexes - Haciendo un Almacén de Datos
José Redondo
DPA SolidQ | SDP Bits America...
Expositor
 Jose Redondo
 DPA, SolidQ – Specialist Data Platform, BITS Americas
Colombia
 MCP | MCTS – MS SQL Server; MT...
MS SQL Server 2014
In Memory ColumnStore Indexes - Haciendo un Almacén de Datos
AGENDA
 Introducción
 Implementación & Mantenimiento
 Arquitectura & Funcionamiento
 Compresión de datos
 Modo de pro...
Un aproximado de un volumen de datos
administrado por un Almacén de Datos (DW)
0% 10% 20% 30% 40% 50%
No sabe
Mas de 10TB
...
Como Microsoft SQL Server responde a esta oportunidad?
Tecnología Microsoft “In-Memory”
Qué es In-Memory?
Tecnologías implícitas en In-Memory
 Componentes involucrado
 xVelocity
 Hardware de ultima
generación
 Memoria (NUMA)...
 Motor de análisis de datos
 PowerPivot
 SQL Server Analysis Services
 ColumnStore Index
 SQL Server Database Engine
...
 MS SQL Server 2012
 MS SQL Server 2014
 MS SQL Server Parallel Data Warehouse (v1 –
v2)
Escenarios comunes para aceler...
MS SQL Server 2012 introdujo dos innovaciones
dirigidas para cargas de trabajo en el ámbito de
almacenamiento de datos (Da...
Introducción
Qué es ColumnStore Index?
 Una tecnología para
almacenar, recuperar y
administrar datos utilizando
un formato de datos
co...
Qué es ColumnStore Index?
 Podemos usar los índices de
almacenamiento columnar para
responder a una consulta como
cualqui...
Qué es ColumnStore Index?
Un índice de almacenamiento
columnar son datos
organizados lógicamente
como una tabla con filas ...
Beneficios
 Forma parte de la nueva tecnología llamada xVelocity
 Ejecución de consultas 10x
 Hasta 10x en el increment...
Ver el Índice Agrupado (Clustered)
ColumnStore como el estándar para el
almacenamiento de grandes almacenes de
tablas de h...
Mejoras
 Hacer tablas actualizables
 Disponibilidad en la modificación de esquemas
 Más tipos de datos incluidos
 Sopo...
Implementación & Mantenimiento
Características claves
 Índices de Almacenamiento Columnar (Clustered)
Agrupados
 Añadido como nueva característica en M...
Índice de Almacenamiento Columnar
(Nonclustered) No Agrupado
 No es necesario incluir todas las columnas
de la tabla
 Re...
Índice de Almacenamiento Columnar
(Clustered) Agrupado
 Disponible en las Ediciones Enterprise y
Developer de SQL Server ...
Crear un Índice de Almacenamiento
Columnar
Tipo de datos no compatibles
 VARCHAR(MAX), NVARCHAR(MAX)
 NTEXT, TEXT, IMAGE
 DECIMAL (y NUMERIC) con precisión mayor ...
Características no compatibles
 Columnas Sparse
 Columnas calculadas
 Columnas Incluidas
 Vistas o Vistas Indexadas
 ...
Nivel de Aislamiento Soportado
 READ UNCOMMITTED
 READ COMMITTED
 REPEATABLE READ
 SERIALIZABLE
 READ_COMMITED_SNAPSH...
Aplicando eficientemente los índices de
almacenamiento columnar
 Poner los índices de almacenamiento columnar
únicamente ...
Aplicando eficientemente los índices de
almacenamiento columnar
 Estructurar de las consultas como uniones
('Joins') estr...
Leyendo la metadata de los Índices de
Almacenamiento Columnar
 Sys.column_store_dictionaries
 Contiene una fila por cada...
Comando DBCC CSIndex
 Comando DBCC no documentado
 Soportado en MS SQL Server 2012 y
posterior
 Similar a DBCC PAGE par...
Arquitectura & Funcionamiento
Almacenamiento Columnar vs. Heap y B-
Tree
DatosalmacenadoscomoRegistros
DatosalmacenadoscomoColumnas
Beneficios del Almacenamiento
Columnar
 Bajo consumo de memoria.
 Tasas de compresión alta mejoran el rendimiento de las...
Términos Claves – Primera Parte
 Rowgroup (Grupos de Registros)
 Es un grupo de filas que están
comprimidos en formato d...
Términos Claves – Segunda Parte
 Column Segment (Segmento de
Columna)
 Es la unidad de almacenamiento básico para
un índ...
Términos Claves – Tercera Parte
 ColumnStore
(Almacén Columnar)
 Son datos que lógicamente
está organizados como
una tab...
Términos Claves – Cuarta Parte
 Rowstore (Almacén de
Registros)
 Un rowstore son datos que se
encuentran organizados tan...
Términos Claves – Quinta Parte
 Deltastore
 Es una tabla de RowStore (Almacén de
registro) que contiene todos los regist...
Terminología en gráfico
Ejemplo de Índice Columnar
ID_FechaFactura Id_Productos Id_Tiendas Id_Region Cantidad TotalVentas
20080615 2023 100 1 8 4....
Ejemplo de Índice Columnar
ID_FechaFactura Id_Productos Id_Tiendas Id_Region Cantidad TotalVentas
20080615 2023 100 1 8 4....
Ejemplo de Índice Columnar
Paso 2 – Partición Verticalmente (Crear Segmentos)
Ejemplo de Índice Columnar
Paso 3 – Comprimir cada Segmento
Algunos segmentos
serán comprimidos
mas que otros
Ejemplo de Índice Columnar
Paso 4 – Leer los datos
 Insert
 Es insertado en uno de los Delta Stores en sesión
 Deletes
 Si la fila eliminada se encuentra
en el interior ...
Como se crean los DeltaStore?
 Comandos INSERT, DELETE y MERGE
 Que no apliquen el comando BULK
INSERT API
 Excluyendo ...
Tupla Motriz
 Cuando un DeltaStore . . .
 Alcanza el tamaño máximo de 1,048,576
registros
 Ha sido cerrado
 Y estará d...
Tupla Motriz
Delta
(Registro)
Store
Column Store
TuplaMotriz
Consumo de Memoria
 En MS SQL Server 2014
 El grado de paralelismo (DOP) estará variando de la misma forma
que SQL Serve...
 Error 8657 o 8658
 Estos errores acontecen cuando falla la concesión inicial de la memoria
 Considere cambiar los ajus...
Eliminando BitMap
 Un almacenamiento que contiene
información sobre los registros
borrados dentro de los segmentos
 La r...
Almacenamiento de los Índices de
Almacenamiento Columnar
Ilustración sobre como un Índice de Almacenamiento Columnar es cr...
Qué son los Diccionarios?
 Ampliamente utilizado en el Almacenamiento Columnar
 De manera eficiente, codifica los tipos ...
Diccionarios
 Diccionario Primario (Global)
 Este es un diccionario global que es usado
por todos los segmentos de una c...
Compresión de datos
Compresión de datos
Espacio utilizado en GB (101 millones de registros por tabla)
0
5
10
15
20
0.0 5.0 10.0 15.0 20.0
Tabl...
Compresión “Modo Archival”
 Nuevo en MS SQL Server 2014
 Puede ser aplicado en una tabla o una partición
 Proporciona u...
Comparación del Modo de Compresión
Archivo
Nombre de Base de
Datos
Tamaño del dato
(GB)
Ratio de compresión
% de Compresió...
Modo de procesamiento por lotes
 Presentado por primera vez en MS SQL Server 2012
 Utiliza un nuevo modelo de iterador para le
procesamiento de datos de...
Modo de procesamiento por lotesMSSQLServer2012SP1
Modo de procesamiento por lotes
MSSQLServer2012SP1
Modo de procesamiento por lotesMSSQLServer2012SP1
Modo de procesamiento por lotesMSSQLServer2012SP1
Modo de procesamiento por lotesMSSQLServer2014CTP2
Modo de procesamiento por lotesMSSQLServer2014CTP2
Modo de procesamiento por lotes
MSSQLServer2014CTP2
DEMO
PREGUNTAS & RESPUESTAS
MS SQL Server 2014
In Memory ColumnStore Indexes - Haciendo un Almacén de Datos
Jose Redondo – MS SQL Server MVP
Correo: r...
Los invitamos al
Muchas gracias por su participación
Upcoming SlideShare
Loading in …5
×

MS SQL Server 2014 - In-Memory ColumnStore Index - Haciendo un almacén de datos

1,609 views

Published on

Las características "In Memory" es la tendencia más de perspectiva en el área de alto rendimiento. Los Índices de ColumnStore es uno de las tales características, y aún con sus limitaciones, pueden aceleran a veces sus consultas! ¿Cómo obtener más de esta característica? ¿En qué situaciones debemos usarlos? ¿Qué mecanismos internos ayudan a lograr eso? Usted puede obtener respuestas a estas y otras preguntas que se haya generado en algún momento en esta sesión.

Published in: Technology
  • Be the first to comment

MS SQL Server 2014 - In-Memory ColumnStore Index - Haciendo un almacén de datos

  1. 1. MS SQL Server 2014 In Memory ColumnStore Indexes - Haciendo un Almacén de Datos José Redondo DPA SolidQ | SDP Bits America Colombia | SQL Server MVP Correo: redondoj@gmail.com | Twitter: @redondoj | Blog: redondoj.wordpress.com
  2. 2. Expositor  Jose Redondo  DPA, SolidQ – Specialist Data Platform, BITS Americas Colombia  MCP | MCTS – MS SQL Server; MTA – DAF | MS SQL Server MVP
  3. 3. MS SQL Server 2014 In Memory ColumnStore Indexes - Haciendo un Almacén de Datos
  4. 4. AGENDA  Introducción  Implementación & Mantenimiento  Arquitectura & Funcionamiento  Compresión de datos  Modo de procesamiento por lotes
  5. 5. Un aproximado de un volumen de datos administrado por un Almacén de Datos (DW) 0% 10% 20% 30% 40% 50% No sabe Mas de 10TB 3-10TB 1-3TB Menos de 1TB Hace 3 años Hoy
  6. 6. Como Microsoft SQL Server responde a esta oportunidad?
  7. 7. Tecnología Microsoft “In-Memory”
  8. 8. Qué es In-Memory?
  9. 9. Tecnologías implícitas en In-Memory  Componentes involucrado  xVelocity  Hardware de ultima generación  Memoria (NUMA)  Múltiple núcleos CPU
  10. 10.  Motor de análisis de datos  PowerPivot  SQL Server Analysis Services  ColumnStore Index  SQL Server Database Engine Tecnologías implícitas en In-Memory
  11. 11.  MS SQL Server 2012  MS SQL Server 2014  MS SQL Server Parallel Data Warehouse (v1 – v2) Escenarios comunes para acelerar las consultas en los Almacenes de Datos
  12. 12. MS SQL Server 2012 introdujo dos innovaciones dirigidas para cargas de trabajo en el ámbito de almacenamiento de datos (Data Warehouse)  Índices de almacenamiento columnar (ColumnStore Index)  Modo de procesamiento por lotes vectorizado (Batch “vectorized” Processing Mode) MS SQL Server 2012
  13. 13. Introducción
  14. 14. Qué es ColumnStore Index?  Una tecnología para almacenar, recuperar y administrar datos utilizando un formato de datos columnares  Los datos son comprimidos, almacenados y administrados como una colección de columnas parcialmente
  15. 15. Qué es ColumnStore Index?  Podemos usar los índices de almacenamiento columnar para responder a una consulta como cualquier otro tipo de índice de datos  El optimizador de consultas considera los índices de almacenamiento columnar como origen de datos para acceder a los mismos considerando otros índices al crear un plan de consulta
  16. 16. Qué es ColumnStore Index? Un índice de almacenamiento columnar son datos organizados lógicamente como una tabla con filas y columnas, y físicamente almacenados en un formato de datos columnares.
  17. 17. Beneficios  Forma parte de la nueva tecnología llamada xVelocity  Ejecución de consultas 10x  Hasta 10x en el incremento del funcionamiento de las consultas comparado con el almacenamiento tradicional orientada basado en filas, al almacenar y comprimir datos por columnas  Compresión de datos 7x  Hasta 7x sobre el tamaño de datos sin comprimir, siendo utilizando menos lectura de los mismos al traerlos comprimidos en memoria para luego, al utilizar el volumen de datos reducidos para el procesamiento en la memoria
  18. 18. Ver el Índice Agrupado (Clustered) ColumnStore como el estándar para el almacenamiento de grandes almacenes de tablas de hechos, y esperar a que se utilicen en la mayoría de los escenarios de Data Warehousing Donde aplicarlos? Apunte de Microsoft desde MSDN
  19. 19. Mejoras  Hacer tablas actualizables  Disponibilidad en la modificación de esquemas  Más tipos de datos incluidos  Soporte en la ejecución de modos mixtos  Más operaciones son soportadas para el modo por lotes  Diccionarios globales mejorados para la compresión de los segmentos de datos  Soporte de compresión de datos archival  Soporte nativo Seek y Spill para Bulk Insert masivos
  20. 20. Implementación & Mantenimiento
  21. 21. Características claves  Índices de Almacenamiento Columnar (Clustered) Agrupados  Añadido como nueva característica en MS SQL Server 2014  Índice de Almacenamiento Columnar (Nonclustered) No Agrupado  Añadido como nueva característica en MS SQL Server 2012  Los Índices de Almacenamiento Columnar NO necesitan ningún tipo de hardware para ejecutarse
  22. 22. Índice de Almacenamiento Columnar (Nonclustered) No Agrupado  No es necesario incluir todas las columnas de la tabla  Requiere de almacenamiento para guardar una copia de las columnas en el índice  Puede combinarse con otros índices dela tabla de datos  Usa compresión para Almacenamiento Columnar  La compresión no es configurable  Físicamente, no almacena columnas ordenadas  En cambio, almacena los datos para mejorar la compresión y el rendimiento
  23. 23. Índice de Almacenamiento Columnar (Clustered) Agrupado  Disponible en las Ediciones Enterprise y Developer de SQL Server 2014  Incluye todas las columnas de la tabla y es el método para almacenar toda la tabla  Es el único índice sobre la tabla  No puede combinarse con cualquier otros índice  Usa la compresión para el almacenamiento columnar  La compresión no es configurable  Físicamente, no almacena columnas ordenadas  En cambio, almacena los datos para mejorar tanto la compresión así como el rendimiento
  24. 24. Crear un Índice de Almacenamiento Columnar
  25. 25. Tipo de datos no compatibles  VARCHAR(MAX), NVARCHAR(MAX)  NTEXT, TEXT, IMAGE  DECIMAL (y NUMERIC) con precisión mayor de 18 dígitos  DATETIMEOFFSET, con escala mayor de 2  ROWVERSION (y TIMESTAMP)  SQL_VARIANT  Tipos de CLR (Por ejemplo: Tipos HIERARCHYID y SPATIAL)  XML
  26. 26. Características no compatibles  Columnas Sparse  Columnas calculadas  Columnas Incluidas  Vistas o Vistas Indexadas  No pueden ordenarse por ASC o DESC  Replicación  FileStream  Change Tracking y Change Data Capture
  27. 27. Nivel de Aislamiento Soportado  READ UNCOMMITTED  READ COMMITTED  REPEATABLE READ  SERIALIZABLE  READ_COMMITED_SNAPSHOT
  28. 28. Aplicando eficientemente los índices de almacenamiento columnar  Poner los índices de almacenamiento columnar únicamente en tablas grandes  Típicamente, están ubicadas en las tablas de hechos del almacén de datos, pero no las tablas de dimensiones  Si tenemos en nuestros entornos tablas de dimensiones muy grandes, que almacenan varios de millones de registros, entonces deberíamos aplicar un índice de almacenamiento columnar así como cualquier otro índice en dicha tabla  Incluir todas las columnas de la tabla en el índice de almacenamiento columnar  Si no lo diseñamos de esta manera, tendremos el inconveniente de no beneficiar dicha consulta (O cualquier consulta) puesto que no aplica referencia alguna al escenario en general
  29. 29. Aplicando eficientemente los índices de almacenamiento columnar  Estructurar de las consultas como uniones ('Joins') estrella con agrupaciones y agregaciones tanto como sea posible  Evitar generar uniones con tablas grandes  Generar uniones de tablas de Hechos grandes a una o mas con tablas de Dimensiones pequeñas utilizando el estándar inners join  Utilice un enfoque de modelado dimensional tanto como sea posible para que nuestros datos puedan permitírseles estructurar todas sus consultas en este escenario  Utilizar las mejores prácticas para la administración de las estadísticas así como las consultas mismas  Esto es MUY independiente a la tecnología de los índices de almacenamiento columnar  Utilizar eficientemente las estadísticas en este contexto con el fin de evitar errores en el diseño de las mismas, y así obtener un excelente rendimiento
  30. 30. Leyendo la metadata de los Índices de Almacenamiento Columnar  Sys.column_store_dictionaries  Contiene una fila por cada Diccionario usado con el optimizador de memoria de xVelocity en el índices de almacenamiento columnar  Sys.column_store_segments  Contiene una fila por cada columna en un índice de almacenamiento columnar  Sys.column_store_row_groups  Proporciona información sobre el índice de almacenamiento columnar agrupado (Clustered) sobre una base por segmento (per-segment)  Muy útil para determinar qué registros agrupados tienen un alto porcentaje de filas eliminadas, conllevando con esto, que debe ser reconstruido dicho índice
  31. 31. Comando DBCC CSIndex  Comando DBCC no documentado  Soportado en MS SQL Server 2012 y posterior  Similar a DBCC PAGE para Índices de Almacenamiento Columnar • rowsetid • HoBT o PartitionID desde sys.column_store_segments • columnid • column_id desde sys.column_store_segments • rowgroupid • segment_id desde sys.column_store_segments • object_type • 1 = Segmento • 2 = Diccionario • print_option • Los valores validos son 0,1 y 2 • En estado Beta en la actualidad
  32. 32. Arquitectura & Funcionamiento
  33. 33. Almacenamiento Columnar vs. Heap y B- Tree DatosalmacenadoscomoRegistros DatosalmacenadoscomoColumnas
  34. 34. Beneficios del Almacenamiento Columnar  Bajo consumo de memoria.  Tasas de compresión alta mejoran el rendimiento de las consultas mediante el uso de un bajo uso en la memoria existente. A su vez, puede mejorar el rendimiento de una consulta porque SQL Server puede realizar más operaciones de consultas y datos en memoria (In-Memory)  I/O se reduce ampliamente  Las consultas frecuentemente selecciona únicamente unas pocas columnas de una tabla, con lo cual reduce el total de I/O hacia y desde los medios físicos obteniendo rentabilidad en los recursos existente en el escenario a ejecutarse  Reducción del uso de la CPU  La tecnología de ejecución de consultas avanzadas, procesa "Partes" de las columnas llamadas "Lotes" de una manera simplificada, conllevando a la reducción del uso de la CPU
  35. 35. Términos Claves – Primera Parte  Rowgroup (Grupos de Registros)  Es un grupo de filas que están comprimidos en formato de Almacenamiento Columnar al mismo tiempo  Cada columna en el rowgroup (Grupo de Registro) se comprime y se almacenan por separado en los medios físicos  Cada rowgroup contiene un segmento de la columna para cada columna de la tabla  Los RowGroups define los valores de columna que se encuentran en cada segmento de la columna
  36. 36. Términos Claves – Segunda Parte  Column Segment (Segmento de Columna)  Es la unidad de almacenamiento básico para un índice de almacenamiento columnar  Es un grupo de columnas con valores comprimido y físicamente almacenados en conjunto en los medios físicos  Cada columna esta compuesta de uno o varios segmentos de la columna  Cuando SQL Server comprime un rowgroup, comprime cada columna dentro de la rowgroup como segmento de una columna
  37. 37. Términos Claves – Tercera Parte  ColumnStore (Almacén Columnar)  Son datos que lógicamente está organizados como una tabla con filas y columnas  Físicamente almacenados en un formato de datos columnares  Las columnas se divide en segmentos y se almacenan como segmentos de la columna comprimida
  38. 38. Términos Claves – Cuarta Parte  Rowstore (Almacén de Registros)  Un rowstore son datos que se encuentran organizados tanto por filas así como columnas para luego ser físicamente almacenados en un formato de datos row-wise  Esta ha sido la manera tradicional para almacenar los datos en tablas relacionales
  39. 39. Términos Claves – Quinta Parte  Deltastore  Es una tabla de RowStore (Almacén de registro) que contiene todos los registros hasta que el número de las filas sea suficientemente grande como para ser trasladado al almacén columnar (ColumnStore)  Los registros acumulados en cada DeltaStore se almacenarán hasta que el número de filas sea el máximo permitido en un rowgroup  Para cada almacén columnar (ColumnStore) puede haber múltiples DeltaStores  Para una tabla con particiones, hay uno o más DeltaStores para cada partición  Los DeltaStore se encuentran en el formato de registro tradicional de índices (B-Trees)  Es muy costoso para consultar los segmentos columnares comprimidos  Cada DeltaStore contiene 1.048.576 filas, cuando llega a ser convertido en almacenamiento columnar (ColumnStore)
  40. 40. Terminología en gráfico
  41. 41. Ejemplo de Índice Columnar ID_FechaFactura Id_Productos Id_Tiendas Id_Region Cantidad TotalVentas 20080615 2023 100 1 8 4.500,00 20080615 1756 105 3 5 2.500,00 20080615 4520 105 8 6 6.300,00 20080615 1756 109 1 2 4.580,00 20080615 3652 112 9 8 6.500,00 20080615 2023 102 4 4 4.100,00 20080615 7542 102 3 7 4.200,00 20080616 2023 105 1 8 9.800,00 20080616 1756 109 3 6 9.650,00 20080616 4520 102 8 2 6.525,00 20080616 3652 100 7 8 7.500,00 20080616 2023 112 1 4 6.540,00 20080616 2023 105 1 6 7.512,00 20080617 1756 112 3 2 9.641,00 20080617 2023 105 7 8 3.298,00 20080617 7542 102 9 4 1.278,00
  42. 42. Ejemplo de Índice Columnar ID_FechaFactura Id_Productos Id_Tiendas Id_Region Cantidad TotalVentas 20080615 2023 100 1 8 4.500,00 20080615 1756 105 3 5 2.500,00 20080615 4520 105 8 6 6.300,00 20080615 1756 109 1 2 4.580,00 20080615 3652 112 9 8 6.500,00 20080615 2023 102 4 4 4.100,00 20080615 7542 102 3 7 4.200,00 20080616 2023 105 1 8 9.800,00 ID_FechaFactura Id_Productos Id_Tiendas Id_Region Cantidad TotalVentas 20080616 1756 109 3 6 9.650,00 20080616 4520 102 8 2 6.525,00 20080616 3652 100 7 8 7.500,00 20080616 2023 112 1 4 6.540,00 20080616 2023 105 1 6 7.512,00 20080617 1756 112 3 2 9.641,00 20080617 2023 105 7 8 3.298,00 20080617 7542 102 9 4 1.278,00 Paso 1 – Partición Horizontalmente (Crear un Row Groups) ~1M registros
  43. 43. Ejemplo de Índice Columnar Paso 2 – Partición Verticalmente (Crear Segmentos)
  44. 44. Ejemplo de Índice Columnar Paso 3 – Comprimir cada Segmento Algunos segmentos serán comprimidos mas que otros
  45. 45. Ejemplo de Índice Columnar Paso 4 – Leer los datos
  46. 46.  Insert  Es insertado en uno de los Delta Stores en sesión  Deletes  Si la fila eliminada se encuentra en el interior de un RowGroup, entonces los datos borrados del Bitmap se actualizan con el identificador del registro de la fila respectiva  Si la fila eliminada esta en sesión dentro de un DeltaStore, entonces el proceso de eliminación de dicho registro se ejecuta en el índice B-Tree  Updates  Como se entiende e interpreta una actualización representada en su acción de eliminar e insertar Como ejecutar operaciones básicas
  47. 47. Como se crean los DeltaStore?  Comandos INSERT, DELETE y MERGE  Que no apliquen el comando BULK INSERT API  Excluyendo INSERT . . . SELECT . . .  BULK INSERT (Tamaño regular)  Tamaño promedio de Bach de registros de 100.000, insertándose como una DeltaStore  Alrededor de 100.000 filas se crea en un segmento comprimido  Pero en un Índice de Almacenamiento Columnar Agrupado se fundamenta esta en segmentos de 100k filas al ser suboptimizadas  El tamaño ideal del lote es de 1.000.000 registros
  48. 48. Tupla Motriz  Cuando un DeltaStore . . .  Alcanza el tamaño máximo de 1,048,576 registros  Ha sido cerrado  Y estará disponible para la Tupla Motriz al ser comprimida  La Tupla Motriz  Crea grandes y óptimos segmentos de registros  Esto no ha sido diseñado para ser reemplazados por la recreación de índices  Se ejecuta cada 5 minutos en segundo plano  Ejecución On-Demand  ALTER INDEX . . . REORGANIZED  ALTER INDEZ . . . REBUILD
  49. 49. Tupla Motriz Delta (Registro) Store Column Store TuplaMotriz
  50. 50. Consumo de Memoria  En MS SQL Server 2014  El grado de paralelismo (DOP) estará variando de la misma forma que SQL Server pueda estar cambiando en el consumo de memoria en un momento dado basándose en los recursos actualmente disponibles  Esto significa que algunos de los hilos de ejecución podrían incluso ponerse en espera, con el fin de mantener estable el sistema Memoria concedida como requerimiento en MB = (((4.2 * COLNUM) + 68) * DOP) + (CHRCOL * 34) COLNUM = Números de columnas en el Índice de Almacenamiento Columnar DOP = Grado de Paralelismo CHRCOL = Números de columnas de texto en el Índice de Almacenamiento Columnar
  51. 51.  Error 8657 o 8658  Estos errores acontecen cuando falla la concesión inicial de la memoria  Considere cambiar los ajustes del Gobernador de Recursos para permitir que la instrucción de CREATE INDEX pueda acceder a más memoria  La configuración predeterminada para el Gobernador de Recursos limita una consulta en el pool predeterminado al 25% de memoria disponible  Incluso, si el servidor se encuentra inactivo  Esto es cierto, incluso si no ha activado la Gobernador de Recursos  Error 701 o 802  Se pueden obtener estos errores, si la memoria se agote tardíamente durante la ejecución  La única forma de solucionar estos errores en este caso serían:  Para reducir el Grado de Paralelismo (DOP) explícitamente cuando se crea el Índice  Para reducir la concurrencia en las consultas, o añadir más memoria Errores de Memoria durante la Creación del Índice de Almacenamiento Columnar
  52. 52. Eliminando BitMap  Un almacenamiento que contiene información sobre los registros borrados dentro de los segmentos  La representación de la memoria es un BitMap  Almacenada en el disco como un B- Tree  Contiene identificadores de las filas eliminadas  Consultado de manera regular  Para evitar devolver las filas que ya fueron eliminadas
  53. 53. Almacenamiento de los Índices de Almacenamiento Columnar Ilustración sobre como un Índice de Almacenamiento Columnar es creado y almacenado El conjunto de filas se divide en grupos de fila que se convierten en los segmentos de la columna y diccionarios que luego se almacenan utilizando almacenamiento Blob de SQL Server
  54. 54. Qué son los Diccionarios?  Ampliamente utilizado en el Almacenamiento Columnar  De manera eficiente, codifica los tipos de datos de gran tamaño como cadenas de caracteres  Los valores almacenados en los segmentos de la columna serán solo números de entrada en el diccionario, y los valores reales son los que se almacenan en el diccionario  Eficiente compresión de datos para valores repetidos  Pero produce malos resultados si los valores son muy distintos (En realidad, aumenta el almacenamiento requerido)  Esto es lo que hace que se incremente el tamaño de las columnas (cadena de caracteres) con valores distintos, siendo muy malos candidatos para los Índices de Almacenamiento Columnar  Los Índices de Almacenamiento Columnar contienen diccionarios separados para cada columna, y las columnas con valores de cadena contienen dos (2) tipos de diccionarios como se explicaran a continuación:
  55. 55. Diccionarios  Diccionario Primario (Global)  Este es un diccionario global que es usado por todos los segmentos de una columna  Diccionario Secundario (Local)  Este es un diccionario de desbordamiento para la entradas que no aplicaba en los diccionarios primarios  Esta puede ser compartida por diversos segmentos de una columna: La relación entre diccionarios y segmentos de columna es de uno a muchos  sys.column_store_dictionaries  Puede encontrarse información sobre los diccionarios utilizados por un almacén columnar en esta DMV
  56. 56. Compresión de datos
  57. 57. Compresión de datos Espacio utilizado en GB (101 millones de registros por tabla) 0 5 10 15 20 0.0 5.0 10.0 15.0 20.0 Tabla con indexación ordinaria Tabla con indexación ordinaria (Con compresión de página) Tabla con ningún índice Tabla con ningún índice (Con compresión de página) Tabla con índice de almacenamiento columnar Almacenamiento columnar agrupado Espacio utilizado = Table space + Index space
  58. 58. Compresión “Modo Archival”  Nuevo en MS SQL Server 2014  Puede ser aplicado en una tabla o una partición  Proporciona una compresión amplia de 37% a 67%  El aumento de la compresión depende de los datos  Proceso transparente  Comprime los datos Blob antes de almacenarlos en disco  La compresión de archivo “Archival” se implementa como una capa de compresión extra al proceso, ya que transparentemente son comprimidos los datos en el disco  Utiliza el algoritmo XPress8  Es una variante interna de compresión denominada LZ77 generada por Microsoft en los años 70  Trabaja con multiples hilos  Utiliza un máximo de flujo de datos de 64KB
  59. 59. Comparación del Modo de Compresión Archivo Nombre de Base de Datos Tamaño del dato (GB) Ratio de compresión % de Compresión en Modo Archivo GZIP No Si PDVSA 95,4 5,84 9,33 4,85 MACMA 41,3 2,2 3,65 3,08 ASODIAM 47,1 3,0 5,27 5,1 SHELL 1,3 5,41 10,37 8,07 INTER Network 14,7 6,92 16,11 11,93 GM Foods 1,0 23,8 70,4 43,3 El cuadro anterior muestra los diferentes escenarios de compresión de datos alcanzadas con y sin compresión de archivo de datos para varios conjuntos de datos reales
  60. 60. Modo de procesamiento por lotes
  61. 61.  Presentado por primera vez en MS SQL Server 2012  Utiliza un nuevo modelo de iterador para le procesamiento de datos de “Un Lote a la Vez” en lugar de “Una Fila a la Vez”  Un lote típicamente es representado por 1000 registros de datos  Cada columna dentro de un lote se almacena como un vector en un área separada de la memoria, ósea que el procesamiento en modo por lote es basado en vectores  Utiliza algoritmos que están optimizados para el rendimiento del aumento de memoria y CPU multinucleos que se encuentran en hardware modernos  El procesamiento en modo por lotes expande los costos de acceso a metadatos y otros tipos de gastos para todas las filas de un lote, en lugar de pagar el costo por cada fila  Así mismo, funciona con datos comprimidos cuando sea posible y elimina algunos de los operadores de intercambio utilizados por el procesamiento en modo de fila  El resultado es obtener un mejor y mas eficiente paralelismo, y una ejecución mas rápida y optima Modo de procesamiento por lotes
  62. 62. Modo de procesamiento por lotesMSSQLServer2012SP1
  63. 63. Modo de procesamiento por lotes MSSQLServer2012SP1
  64. 64. Modo de procesamiento por lotesMSSQLServer2012SP1
  65. 65. Modo de procesamiento por lotesMSSQLServer2012SP1
  66. 66. Modo de procesamiento por lotesMSSQLServer2014CTP2
  67. 67. Modo de procesamiento por lotesMSSQLServer2014CTP2
  68. 68. Modo de procesamiento por lotes MSSQLServer2014CTP2
  69. 69. DEMO
  70. 70. PREGUNTAS & RESPUESTAS
  71. 71. MS SQL Server 2014 In Memory ColumnStore Indexes - Haciendo un Almacén de Datos Jose Redondo – MS SQL Server MVP Correo: redondoj@gmail.com Twitter: @redondoj Blog: redondoj.wordpress.com
  72. 72. Los invitamos al
  73. 73. Muchas gracias por su participación

×