Por Luis Ramirez, Revision Técnica: Ivanov Cepeda

La compresión de datos permite hacer más eficiente la administración del espacio en disco y no requiere que se hagan cambios en las aplicaciones para ser habilitado.

El objetivo no es obtener la máxima compresión posible, pero encontrar un punto de equilibrio justo entre, la compresión lograda, y el costo de compresión/descompresión de los datos. De nada servirá si el servidor SQL puede comprimir los datos en un 90% pero el costo del CPU se vuelve inaceptablemente alto en operaciones de SELECT y DML (Data Manipulation Language).

SQL Server 2008 admite dos tipos de compresión:

- Compresión de fila (ROW).

Comprime individualmente las columnas de una tabla.
Esto es si tenemos una columna fija de 25 caracteres para almacenar apellidos y solo hacemos uso de 5 caracteres, la compresión liberaría 20.

image

- Compresión de página (PAGE).

Comprime las páginas de datos combinando compresión de fila, prefijo y de diccionario.

Información de compresión (CI en inglés) será la estructura al inicio de cada página de datos, dentro de esta estructura, hay dos componentes muy útiles: el primero es una sección de prefijos de columna y el segundo es un diccionario de la página.

La parte del prefijo del CI, se realiza buscando un patrón de repetición en una columna por página, la segunda parte es almacenar este prefijo y asignarle un valor para que lo represente en esa columna. Esto resultará ser especialmente útil para tablas con índices donde los primeros caracteres o números probablemente serán el mismo dentro de una página de datos.

Por ejemplo "CustomerID" tenemos un rango de "1342000" a "1342999", el CI almacenaría "1342" como prefijo de columna y substituye este valor a para esta página. A continuación el diccionario de la página va a remplazar los valores enteros en la página que son repetitivas, e insertar un puntero dentro de la página de datos que remite a un valor en el diccionario de la página

1. Página Original

2.  Se hace un PREFIJO por columna.
Por ejemplo la primer columna el encabezado es aaabcc
Ahora la primer línea originalmente es aaabb por lo tanto si lo comparamos con el encabezado usamos las primeras cuatro letras por lo tanto lo substituimos por 4b

3. El siguiente paso es hacer el diccionario de página.

Vamos a tomar los valores que se repiten en toda la página y lo apuntamos al valor determinado.
En este caso 4b se usa en la primera línea en dos columnas, por lo tanto creamos una entrada en el IC para 4b y hacemos un apuntador a la entrada para cada referencia.

image image image

La cantidad de compresión depende de los tipos de datos y los datos almacenados en la base de datos. Por lo general se usa compresión de fila en ambientes de alto uso de DML y la de página en ambientes de solo lectura.

Mas información:

Managing Data Compression in SQL Server 2008

http://blogs.msdn.com/b/sreekarm/archive/2008/12/29/managing-data-compression-in-sql-server-2008.aspx