Algunos textos sobre la compresión de datos de SQL Server que leí indican que el costo de escritura aumenta aproximadamente cuatro veces más de lo que normalmente se requeriría. También parece implicar que este es el principal inconveniente de la compresión de datos, lo que implica que para una base de datos de archivo de solo lectura, el rendimiento (con algunas excepciones) mejorará con el uso de la compresión de datos de páginas llenas al 100%.
- ¿Son ciertas las afirmaciones anteriores?
¿Cuáles son las "variaciones" principales entre la compresión de datos y de otro modo (para leer)
- "CPU + x%"?
- "IO -y%"?
- ocurrencia de división de página?
- uso de tempdb?
- Uso de RAM?
- ¿Y para escribir?
A los efectos de esta pregunta, puede limitar el contexto a la compresión a nivel de PÁGINA de una base de datos grande (> 1 TB) , pero los comentarios adicionales siempre son bienvenidos.
Referencias
Blog del motor de almacenamiento de SQL Server (el escenario DW muestra que la compresión es muy ventajosa)
Compresión de datos: estrategia, planificación de capacidad y mejores prácticas
Un enfoque más detallado para decidir qué comprimir implica analizar las características de la carga de trabajo para cada tabla e índice. Se basa en las siguientes dos métricas:
U: El porcentaje de operaciones de actualización en una tabla, índice o partición específicos, en relación con las operaciones totales en ese objeto. Cuanto menor sea el valor de U (es decir, la tabla, el índice o la partición se actualiza con poca frecuencia), mejor candidato es para la compresión de la página.
S: El porcentaje de operaciones de escaneo en una tabla, índice o partición, en relación con las operaciones totales en ese objeto. Cuanto mayor sea el valor de S (es decir, la tabla, el índice o la partición se escanea principalmente), mejor candidato es para la compresión de la página.
Ambas de las anteriores están sesgadas de manera demostrable a recomendar la compresión de páginas para bases de datos de estilo DW (operaciones de gran volumen de lectura / exclusivas / exclusivas).
Respuestas:
Solo mis 2cents de mis propios experimentos en hardware de 1-2 años:
Operaciones de solo lectura (escaneos de estilo DW, clasificaciones, etc.) en tablas comprimidas por página (~ 80rows / página) He encontrado un punto de equilibrio en la reducción del tamaño de compresión de ~ 3x.
Es decir, si las tablas se ajustan a la memoria de todos modos, la compresión de la página solo beneficia el rendimiento si el tamaño de los datos se ha reducido en más de 3 veces. Escanea menos páginas en la memoria, pero lleva más tiempo escanear cada página.
Yo supongo que esto puede variar según si sus planes son de bucle anidado y buscan-pesado. Entre otros, esto también dependería del hardware (penalizaciones de acceso a nodos NUMA externos, velocidad de memoria, etc.).
Lo anterior es solo una regla general aproximada que sigo, basado en mis propias ejecuciones de prueba usando mis propias consultas en mi propio hardware (Dell Poweredge 910 y versiones anteriores). No es evangelio eh!
Editar: Ayer, la excelente presentación SQLBits XI de Thomas Kejser se puso a disposición como un video. Muy relevante para esta discusión, muestra la cara 'fea' del costo de la CPU para la compresión de la página: las actualizaciones se ralentizaron 4 veces, los bloqueos se mantuvieron durante un tiempo más largo.
Sin embargo , Thomas está utilizando el almacenamiento FusionIO y eligió una tabla que solo es 'solo' elegible para la compresión de la página. Si el almacenamiento se realizara en una SAN típica y los datos se comprimieran 3x-4x, entonces la imagen podría haber sido menos dramática.
fuente
Puedo agregar algunas palabras de mi entorno de Data Warehouse.
¡La implementación de la compresión (PÁGINA en mi caso) en una mesa de prueba con 30 millones de filas (18GB) reduce el tamaño de la mesa de 18GB a 3GB! (eficiencia de almacenamiento seguro) pero aumente el tiempo de carga (escritura) de 22 a 36 minutos.
Por lo tanto, para leer o leer y colocar los datos en la memoria, podría ser una buena solución, pero para la carga diaria de datos podría causar una disminución del rendimiento.
fuente