compresión en sql server 2008

26
Compresión en SQL Server 2008 Enrique Catalá Solid Quality Mentors [email protected]

Upload: enrique-catala-banuls

Post on 11-Jul-2015

778 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Compresión en SQL Server 2008

Compresión en SQL Server 2008

Enrique Catalá

Solid Quality Mentors

[email protected]

Page 2: Compresión en SQL Server 2008

Compresión en SQL Server 2008Agenda

•Motivación

•Aproximaciones en SQL Server 2008

•Backup comprimidos

•Compresión de datos

• FILA

• PÁGINA

•Cómo estimar el ahorro

•Cómo aplicar compresión

•A quién aplicar compresión

Page 3: Compresión en SQL Server 2008

Compresión en SQL Server 2008Motivación

• Cada día se almacena:

• Más información – Terabytes con cierta frecuencia

• Más variopinta – imágenes, videos, audio, gráficos, mapas

• Retos de grandes BDs

• Tamaño de base de datos

• Manejabilidad de la BD (backup, índices, chekdb, …)

• Mecanismo: compresión

• A nivel de fichero:

o NTFS

o BD: backups de base de datos

o A nivel de OLTP Sería complicado de manejar comprimir/descomprimir trozos grandes

• A nivel de fila / página:

o compresión/descompresión de trozos pequeños de información

Page 4: Compresión en SQL Server 2008

Compresión en SQL Server 2008Motivación

•Si reducimos la información almacenada

• Tablas/índices más pequeños

o Más fácil de gestionar

• Ficheros más pequeños

o Más fácil de copiar

• Se tiende a guardar demasiada información

• Otros fabricantes ya lo cubren:

Almacenamiento CPU Mejora

Rendimiento

Oracle -29% +10% +10%

DB2 -39% +10% +6%

Page 5: Compresión en SQL Server 2008

Compresión en SQL Server 2008

Aproximaciones

•A nivel de fichero

• Compresión de BACKUP

•A nivel de datos

• Ninguno (como hasta ahora*)

• Compresión de fila – ROW

• Compresión de página – PAGE

* Vardecimal cubierto desde SQL 2005 SP2

Page 6: Compresión en SQL Server 2008

Compresión en SQL Server 2008Aproximación– BACKUP

•BACKUP comprimido (Ratios 5:1)

• Depende de los datos

• Similar a otros fabricantes. Algoritmo propietario

• Resultados (para BACKUP y RESTORE)

o Menos I/O y menos tiempo

o Más CPU

– Depende de carga OLTP, pero asumible a partir de 4 Cores

•Todos pueden RESTORE con compresión

• Sólo Enterprise Edition BACKUP con compresión

Page 7: Compresión en SQL Server 2008

Compresión en SQL Server 2008BACKUP

• Sintaxis:• BACKUP DATABASE ... WITH COMPRESSION

• Por defecto deshabilitado• EXEC sp_configure 'backup compression default', '1'

• Rendimiento real* para AdventureWorks:

• Sin compresión: 131 segundos (2,685 Mb/s) – 361 Mb

• Con compresión: 49 segundos (7,081 Mb/s) – 44 Mb

• Ratio 8:1 en tamaño

• Ratio 2.6:1 en tiempo

• Compresion NTFS: 600 segundos – 117 Mb (posterior)

• Compresión NTFS: 270 segundos – 117 Mb

• Cálculo del rendimiento real en vuestros sistemas:• SELECT backup_size/compressed_backup_size FROM msdb..backupset;

* Virtual Server 2005 R2 800Mb Ram, W2003 R2, HP dv9000

Page 8: Compresión en SQL Server 2008

DEMO

Compresión de

backups

Page 9: Compresión en SQL Server 2008

Compresión en SQL Server 2008

Consideraciones compresion BACKUP

• No es posible tener en un mismo conjunto, BACKUPS

comprimidos y descomprimidos

• Uso intensivo de CPU. Podemos limitar su impacto

creando un resource pool que limite el uso de CPU a

un 20% como máximo

• Versiones anteriores de SQL Server no pueden

restaurar backups comprimidos

• No es necesario especificar nada en el RESTORE

Page 10: Compresión en SQL Server 2008

Compresión en SQL Server 2008Formatos de compresión – ROW

•Compresión a nivel de fila

•Eficiencia en almacenamiento de cada columna

• Conceptualmente, casi todas las columnas son de longitud

variable.

• Nulos de longitud fija = nada de espacio

•Arreglar “errores” de elección de tipos de datos:

• Smallint, int, bigint, decimal, numeric, smallmoney, money

• Datetime, datetime2, timestamp

• Char, nchar

Page 11: Compresión en SQL Server 2008

Compresión en SQL Server 2008

Compresión de filas: Consideraciones

•Se puede aplicar a:

• Tablas almacenadas como HEAP

• Tablas almacenadas como índices agrupados

• Índices no agrupados

• Vistas indexadas

• Tablas e índices particionados (inclusive de forma independiente cada partición)

• La compresión no se activa en los índices no agrupados de forma automática

• La compresión no varia al crear un índice agrupado sobre un HEAP

• OJO! No soluciona la fragmentación…REINDEXA!

Page 12: Compresión en SQL Server 2008

• Microsoft® SQL Server™ 2005 Service Pack 2 (SP2)

• VarDecimal

• Habilita que valores decimales puedan ser almacenados en tamaño variable

• Máxima precisión requería 17 bytes!!!

DateId CarrierTracking OfferID PriceDisc

20070601 4911-403C-98 10 0.00

20070601 4911-403C-99 10 0.00

20070602 6431 10 0.00

20070602 6431-4D57-83 10 0.00

20070602 6431-4D57-84 10 0.00

20070602 6431-4D57-85 10 100.00

20070603 4E0A-4F89-AE 10 0.00

DateId CarrierTracking OfferID PriceDisc

20070601 4911-403C-98 10 0.00

20070601 4911-403C-99 10 0.00

20070602 6431 10 0.00

20070602 6431-4D57-83 10 0.00

20070602 6431-4D57-84 10 0.00

20070602 6431-4D57-85 10 100.00

20070603 4E0A-4F89-AE 10 0.00

Compresión en SQL Server 2008Formatos de compresión – ROW

Page 13: Compresión en SQL Server 2008

• Columnas de tamaño

fijo:

• SQL Server 2008 extiende

la lógica a tipos de datos

fijos:

o int, bigint, datetime, char, etc.

DateId CarrierTracking OfferID PriceDisc

20070601 4911-403C-98 10 0.00

20070601 4911-403C-99 10 0.00

20070602 6431 10 0.00

20070602 6431-4D57-83 10 0.00

20070602 6431-4D57-84 10 0.00

20070602 6431-4D57-85 10 100.00

20070603 4E0A-4F89-AE 10 0.00

DateId CarrierTracking OfferID PriceDisc

20070601 4911-403C-98 10 0.00

20070601 4911-403C-99 10 0.00

20070602 6431 10 0.00

20070602 6431-4D57-83 10 0.00

20070602 6431-4D57-84 10 0.00

20070602 6431-4D57-85 10 100.00

20070603 4E0A-4F89-AE 10 0.00

Compresión en SQL Server 2008Formatos de compresión – ROW

Page 14: Compresión en SQL Server 2008

DEMO

• Vardecimal en

SQL 2005

• Compresión de

filas

Page 15: Compresión en SQL Server 2008

Compresión en SQL Server 2008Formatos de compresión – PAGE

•A nivel de página

•Un paso más allá de compresión de fila

•Secuencia de 3 fases:

1. Compresión de fila (visto anteriormente)

2. Compresión de prefijos

3. Compresión de diccionario

•Cuanto más frecuencia, mayor eficiencia de

almacenamiento

Page 16: Compresión en SQL Server 2008

Compresión en SQL Server 2008

Formatos de compresión – PAGE – Prefijos

•Segundo paso: reemplazo de prefijos

•Los prefijos se almacenan en un área de la página

(anchor record)

•Prefijos por columna

• Cada columna su lista de prefijos

• No se expande a todas las columnas

• Formato de almacenamiento

Page 17: Compresión en SQL Server 2008

• Compresión mediante

prefijos:

• Lista de prefijos se

almacena en la página,

para prefijos comunes

para cada columna

• Cada valor encontrado

se reemplaza por:

o Token para el prefijo

o Sufijo para el valor

DateId CarrierTracking OfferID PriceDisc

20070601 4911-403C_9 8 10 0.00

20070601 4911-403C_9 9 10 0.00

20070602 6431-4D57_8 2 10 0.00

20070602 6431-4D57_8 3 10 0.00

20070602 6431-4D57_8 4 10 0.00

20070602 6431-4D57_8 5 10 100.00

20070603 4E0A-4F89_AE 10 0.00

DateId CarrierTracking OfferID PriceDisc

4911-403C_98 6431-4D57_82200706011

11

Compresión en SQL Server 2008Formatos de compresión – PAGE – Prefijos

2

2

2

2

3

9

3

4

5

4E0A-4F89-AE

8

8

7

7

7

7

7

12

11

11

11

11

10 0.00

2

2

2

2

2

2

2

3

3

3

3

3

3

100.00

Page 18: Compresión en SQL Server 2008

• Compresión por

diccionario:

• Un valor común de

diccionario se almacena en

la página

• Los valores comunes son

reemplazados por tokens

• Un ratio de compresión de

2X a 7X para anticipación

de datos reales en tablas

de hecho en un almacén

de datos

DateId CarrierTracking OfferID PriceDisc

10

1 8 0.00

1 9 0.00

2 0.00

2 3 0.00

2 4 0.00

2 5 100.00

3 4E0A-4F89-AE 0.00

4911-403C-9C2 6431-4D57-8232007060111

1

1

1

1

1

1

1

2

2

3

3

3

3

4

DateId CarrierTracking OfferID PriceDisc

8

9

3

4

5 100.00

3 4E0A-4F89-AE

4911-403C-9C2 6431-4D57-8232007060111

1

1

1

1

1

1

1

2

2

3

3

3

3

4

22 10311 0.004

1

1

2

2

2

2

4

4

4

4

4

4

Compresión en SQL Server 2008Formatos de compresión – PAGE – Diccionario

4

4

4

4

4

4

4

4

4

4

4

4

4

4

4

Page 19: Compresión en SQL Server 2008

Compresión en SQL Server 2008

Compresión de páginas: Consideraciones

•OJO! Compresión de página en HEAPs solo se

realiza con:

• BULK INSERT

• INSERT INTO…WITH(TABLOCK)

• REBUILD con reactivación de compresión por página

• Sentencias DML no se comprimen en HEAPs

• Nosotros hemos de lanzar un ALTER TABLE…WITH

COMPRESSION = PAGE

Page 20: Compresión en SQL Server 2008

Compresión en SQL Server 2008

Compresión: Tipos de datos

• No afecta a:

• Varchar,nvarchar,image,text,ntext

• XML, FILESTREAM, varbinary y sql_variant

• Date, time (ya extremadamente compactos)

• Beneficio obtenido en otros tipos de datos:

• datetime, datetime2, datetimeoffset: ahorra 2 bytes si no almacena segundos

• char: solo ocupa lo necesario (como varchar)

• int, bigint,float, real,…: solo usa lo necesario

• binary: no almacena los ceros que puede evitar

• …

• En todos los tipos de datos, NULL y 0 no ocupan ningun byte

Page 21: Compresión en SQL Server 2008

Compresión en SQL Server 2008Compresión de filas: Sintaxis

•Crear tabla con compresión habilitada (ROW ó

PAGE):

•Activar compresión en tabla ya existente:

•Desactivar compresión en tabla:

CREATE TABLE T1

(c1 int, c2 nvarchar(50) )

WITH (DATA_COMPRESSION = ROW);

CREATE TABLE PartitionTable1 (col1 int, col2

varchar(max)) ON myRangePS1 (col1)

WITH (

DATA_COMPRESSION = ROW ON PARTITIONS (1),

DATA_COMPRESSION = PAGE ON PARTITIONS (2 TO 4) );

ALTER TABLE T1 REBUILD WITH

(DATA_COMPRESSION = ROW);

ALTER TABLE T1 REBUILD WITH

(DATA_COMPRESSION = NONE);

Page 22: Compresión en SQL Server 2008

DEMO

Compresión de

páginas

Page 23: Compresión en SQL Server 2008

Compresión en SQL Server 2008BACKUP

•Resultados

Tiempo (segs) Espacio (kb)

Normal 23 54.90% 36.002 73.62%

51 136.468

Row 14 69.57% 37.159 70.08%

46 124.188

Page 6 64.71% 35.952 63.91%

17 99.616

Page 24: Compresión en SQL Server 2008

Compresión en SQL Server 2008Consideraciones extra

• La compresión puede ser ONLINE u OFFLINE

• Compresión ONLINE con un único thread (paginación no beneficiada)

• En un HEAP, si existen índices no agrupados, han de ser recreados para apuntar a las nuevas ubicaciones de las páginas recién comprimidas

• Se soporta vardecimal por compatibilidad con SQL 2005, pero se considera depreciado debido a compresión por fila

• Convivencia vardecimal – ROW y PAGE compressionpero sin beneficio

Page 25: Compresión en SQL Server 2008

Compresión en SQL Server 2008Consideraciones extra

•La compresión permite almacenar mas

información por página, pero no por fila

•SQL Server garantiza que la descompresión de

un dato es siempre posible (cabe)

• No se puede comprimir una tabla donde el tamaño

máximo de una fila + sobrecarga de compresión, superan

8060 bytes

Page 26: Compresión en SQL Server 2008

Compresión en SQL Server 2008Resumen

•Motivación

•Aproximaciones en SQL Server 2008

•Backup comprimidos

•Compresión de datos

• FILA

• PÁGINA

•Cómo estimar el ahorro

•Cómo aplicar compresión

•A quién aplicar compresión