2011-06-05 25 views
5

Al usar la compresión de nivel de fila o de página con SQL Server 2008 R2, SQL Server almacena los datos en su buffer cache en su forma comprimida o en su forma expandida.¿Cómo se almacenan los datos comprimidos en la memoria caché del búfer, comprimidos o sin comprimir?

Por ejemplo, digamos que tengo una tabla que está (a nivel de página) comprime hasta un 20% de su tamaño original:

Original size: 100 GB 
Compressed size: 20 GB 

Además, el (dedicado) de acogida que esta instancia particular de SQL El servidor se está ejecutando tiene 24 GB de memoria. Si una consulta realiza un escaneo de tabla, mirando todas las columnas (por ejemplo) y SQL Server guarda en caché los datos como comprimidos, teóricamente puede tener todos los datos en su memoria caché de memoria intermedia y está disponible para futuras consultas. Sin embargo, si los datos se almacenan en caché sin comprimir, es evidente que 100 GB de datos no caben en 24 GB de memoria del servidor.

Entonces, ¿cómo almacena SQL Server los datos comprimidos en su memoria caché del búfer?

Respuesta

7

Las páginas comprimidas se conservan comprimidas en el disco y permanecen comprimidas cuando se leen en la memoria.

Ref: SQL Server 2008 Data Compression: Strategy, Capacity Planning and Best Practices:

datos se descomprimen (no todo el página, pero sólo los valores de los datos de intereses) cuando se cumple una de las siguientes condiciones:

  • Se se lee para filtrar, ordenar, unir, como parte de una respuesta de consulta.
  • Es actualizado por una aplicación.

No hay una copia descomprimida en la memoria de la página comprimida. La descompresión de datos consume CPU. Sin embargo, debido datos comprimidos utiliza menos páginas de datos, sino que también ahorra:

  • física I/O: Debido a E/S física es cara desde la perspectiva de la carga de trabajo , la reducción de E/S física a menudo resulta en un ahorro mayor que el costo de CPU adicional para comprimir y descomprimir los datos. Tenga en cuenta que E/S física se guarda porque se lee un volumen más pequeño de datos o en el disco, y porque más datos pueden permanecer en la memoria del grupo de búferes .

  • I Lógico/O (si hay datos en la memoria): Porque lógico/O consume CPU, reducida I/O lógica puede a veces compensar el costo de CPU a comprimir y descomprimir los datos.

Cuestiones relacionadas