Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Tareas para usar índices de almacén de columnas agrupados en SQL Server.
Para obtener información general sobre los índices de almacén de columnas, consulte Índices de almacén de columnas descritos.
Para obtener información sobre los índices de almacén de columnas agrupados, consulte Uso de índices de almacén de columnas agrupados.
Contenido
Crear un índice de almacén de columnas agrupado
Para crear un índice de almacén de columnas agrupado, primero cree una tabla de almacén de filas como un montón o un índice agrupado y, a continuación, use la instrucción CREATE CLUSTERED COLUMNSTORE INDEX (Transact-SQL) para convertir la tabla en un índice de almacén de columnas agrupado. Si desea que el índice de almacén de columnas agrupado tenga el mismo nombre que el índice agrupado, use la opción DROP_EXISTING.
En este ejemplo se crea una tabla como un montón y, a continuación, se convierte en un índice de almacén de columnas agrupado denominado cci_Simple. Esto cambia el almacenamiento de toda la tabla de almacenamiento en filas a almacenamiento en columnas.
CREATE TABLE T1(
ProductKey [int] NOT NULL,
OrderDateKey [int] NOT NULL,
DueDateKey [int] NOT NULL,
ShipDateKey [int] NOT NULL);
GO
CREATE CLUSTERED COLUMNSTORE INDEX cci_T1 ON T1;
GO
Para obtener más ejemplos, vea la sección Ejemplos de CREATE CLUSTERED COLUMNSTORE INDEX (Transact-SQL).
Quitar un índice de almacén de columnas agrupado
Use la instrucción DROP INDEX (Transact-SQL) para quitar un índice de almacén de columnas agrupado. Esta operación quitará el índice y transformará la tabla de almacén de columnas en un montón de filas.
Cargar datos en un índice de columnstore agrupado
Puede agregar datos a un índice de almacén de columnas agrupado existente mediante cualquiera de los métodos de carga estándar. Por ejemplo, la herramienta de carga masiva bcp, Integration Services, e INSERT ... SELECT pueden cargar datos en un índice de almacén de columnas agrupado.
Los índices de almacén de columnas agrupados aprovechan el almacén delta para evitar la fragmentación de los segmentos de columna en el almacén de columnas.
Cargar datos en una tabla particionada
En el caso de los datos con particiones, SQL Server asigna primero cada fila a una partición y, a continuación, realiza operaciones de almacén de columnas en los datos de la partición. Cada partición tiene sus propios rowgroups y al menos un deltastore.
Escenarios de carga de Deltastore
Las filas se acumulan en el almacén delta hasta que el número de filas es el número máximo de filas permitidas para un grupo de filas. Cuando el deltastore contiene el número máximo de filas por grupo de filas, SQL Server marca el grupo de filas como "CERRADO". Un proceso en segundo plano, denominado "tupla-mover", busca el grupo de filas CLOSED y se mueve al almacén de columnas, donde el grupo de filas se comprime en segmentos de columna y los segmentos de columna se almacenan en el almacén de columnas.
Para cada índice de almacén de columnas agrupado puede haber varios almacenes delta.
Si un almacén delta está bloqueado, SQL Server intentará obtener un bloqueo en otro almacén delta. Si no hay almacenes delta disponibles, SQL Server creará un nuevo almacén delta.
Para una tabla con particiones, puede haber uno o varios deltastores para cada partición.
Para índices de almacén de columnas agrupados únicamente, los escenarios siguientes describen cuándo las filas cargadas van directamente al almacén de columnas o cuándo van al almacén delta.
En este ejemplo, cada grupo de filas puede tener de 102.400 a 1.048.576 filas.
| Filas para carga por lotes | Filas agregadas al columnstore | Filas añadidas al DeltaStore |
|---|---|---|
| 102 000 | 0 | 102 000 |
| 145,000 | 145,000 Tamaño del grupo de filas: 145.000 |
0 |
| 1,048,577 | 1 048 576 Tamaño del grupo de filas: 1.048.576 |
1 |
| 2,252,152 | 2,252,152 Tamaños de los grupos de filas: 1.048.576, 1.048.576, 155.000 |
0 |
En el ejemplo siguiente se muestran los resultados de cargar 1048 577 filas en una partición. Los resultados muestran un grupo de filas COMPRESSED en el almacén de columnas (como segmentos de columna comprimidos) y una fila en el almacén delta.
SELECT * FROM sys.column_store_row_groups;
Cambiar datos en un índice columnstore agrupado
Los índices de almacén de columnas agrupados admiten operaciones de inserción, actualización y eliminación de DML.
Use INSERT (Transact-SQL) para insertar una fila. La fila se añadirá al deltastore.
Use DELETE (Transact-SQL) para eliminar una fila.
Si la fila está en el almacén de columnas, SQL Server marca la fila como eliminada lógicamente, pero no reclama el almacenamiento físico de la fila hasta que se vuelva a generar el índice.
Si la fila está en el almacén delta, SQL Server elimina lógica y físicamente la fila.
Use UPDATE (Transact-SQL) para actualizar una fila.
Si la fila está en el almacén de columnas, SQL Server marca la fila como eliminada lógicamente y, a continuación, inserta la fila actualizada en el almacén delta.
Si la fila está en el almacén delta, SQL Server actualiza la fila en el almacén delta.
Reconstruir un índice Columnstore agrupado
Use CREATE CLUSTERED COLUMNSTORE INDEX (Transact-SQL) o ALTER INDEX (Transact-SQL) para realizar una recompilación completa de un índice de almacén de columnas agrupado existente. Además, puede usar ALTER INDEX ... RECONSTRUIR para volver a generar una partición específica.
Proceso de reconstrucción
Para reconstruir un índice de almacén de columnas agrupado, SQL Server:
Adquiere un bloqueo exclusivo en la tabla o partición mientras se produce la recompilación. Los datos están "sin conexión" y no están disponibles durante la recompilación.
Desfragmenta el almacén de columnas eliminando físicamente las filas que se han eliminado lógicamente de la tabla; los bytes eliminados se reclaman en los medios físicos.
Combina los datos de almacén de filas en el almacén delta con los datos del almacén de columnas antes de volver a generar el índice. Cuando finalice la recompilación, todos los datos se almacenan en formato de almacén de columnas y el almacén delta está vacío.
Vuelve a comprimir todos los datos en el almacenamiento en columnas. Existen dos copias del índice columnstore mientras se realiza la recompilación. Cuando finalice la recompilación, SQL Server elimina el índice de almacén de columnas original.
Recomendaciones para reconstruir un índice de almacén columnar agrupado
La reconstrucción de un índice de almacén columnar agrupado es útil para quitar la fragmentación y para mover todas las filas al almacén columnar. Tenemos las siguientes recomendaciones:
Reconstruir una partición en lugar de toda la tabla.
La regeneración de toda la tabla tarda mucho tiempo si el índice es grande y requiere suficiente espacio en disco para almacenar una copia adicional del índice durante la recompilación. Normalmente solo es necesario recompilar la partición usada más recientemente.
En el caso de las tablas con particiones, no es necesario recompilar todo el índice de almacén de columnas porque es probable que la fragmentación se produzca solo en las particiones que se han modificado recientemente. Las tablas de hechos y las tablas de dimensiones grandes suelen particionarse con el fin de realizar operaciones de copia de seguridad y administración en fragmentos de la tabla.
Recompile una partición después de operaciones DML pesadas.
La regeneración de una partición desfragmentará la partición y reducirá el almacenamiento en disco. La regeneración eliminará todas las filas del almacén de columnas que estén marcadas para su eliminación y moverá todas las filas del almacén delta al almacén de columnas.
Recompile una partición después de cargar los datos.
Esto garantiza que todos los datos se almacenan en el almacenamiento en columnas. Si se producen varias cargas al mismo tiempo, cada partición podría acabar teniendo varios almacenes delta. La reconstrucción moverá todas las filas del deltastore al columnstore.
Reorganizar un índice de almacén de columnas agrupado
La reorganización de un índice de almacén de columnas agrupado mueve todos los grupos de filas cerrados al almacén de columnas. Para realizar una reorganización, use ALTER INDEX (Transact-SQL)con la opción REORGANIZE.
La reorganización no es necesaria para mover grupos de filas cerrados al almacén de columnas. El proceso de movimiento de tuplas finalmente encontrará todos los grupos de filas cerrados y los moverá. Sin embargo, el motor de tupla es de un solo subproceso y es posible que no mueva grupos de filas lo suficientemente rápido como para la carga de trabajo.
Recomendaciones para reorganizar
Cuándo reorganizar un índice de almacén de columnas agrupado:
- Reorganizar un índice de almacén de columnas agrupado después de una o varias cargas de datos para lograr las ventajas de rendimiento de las consultas lo más rápido posible. La reorganización inicialmente requerirá recursos adicionales de CPU para comprimir los datos, lo que podría ralentizar el rendimiento general del sistema. Sin embargo, en cuanto se comprimen los datos, el rendimiento de las consultas puede mejorar.