SQL Server Denali: Índices Columnstore (2)


La lectura es importante

Cuando se quiere medir por qué tarda mucho una consulta, hay dos estadísticas que nos pueden ayudar para ver dónde está el problema de rendimiento, como podemos ver en el gráfico.

Denali: Índices Columnstore

Con estas instrucciones podemos obtener el tiempo que se utiliza en compilar y ejecutar la instrucción, la primera configuración hace que se muestre el número de milisegundos necesarios para analizar, compilar y ejecutar cada instrucción. Esto lo vemos en la pestaña de mensajes:

Denali: Índices Columnstore

Se nos muestra que el tiempo empleado en analizar y compilar la consulta ha sido de 107 milisegundos y que el tiempo empleado en ejecutarla ha sido de 478 milisegundos. También nos da el tiempo de utilización de la CPU, que es de sólo 80 milisegundos. Esto para la primera vez que se ejecuta. Si la ejecutamos varias veces y ya la caché de procedimientos y de datos está activa, nos daría:

Denali: Índices Columnstore

Podemos observar que hay una gran diferencia entre el tiempo de uso de cpu y el tiempo total. Además al realizar la ejecución de la consulta una segunda vez, al estar la consulta en caché el tiempo de compilación es cero y el tiempo de ejecución se reduce a más de la mitad, indicándonos que la mayor parte del tiempo se emplea en leer los datos.


El primer subsistema que impacta el rendimiento de una consulta son los discos. La tarea más costosa para SQL Server es escribir en disco. La segunda tarea más costosa es leer de disco, fijándonos en el ejemplo anterior vemos que leer tan sólo 2 sectores del disco es lo que más ha costado en la primera ejecución de la consulta (alrededor de 300 ms). Los discos han mejorado en almacenamiento, pero no podemos decir lo mismo de los ratios de transferencia, y si nos vamos a los tiempos de búsqueda la mejora es mínima, y es que los discos siguen teniendo una cabeza movible. Por lo tanto, cuanto menos tengamos que usar el disco mejor, aunque actualmente la tendencia es la contraria.

Cuando la consulta y los datos están en memoria veremos que su lectura es lo siguiente en cuanto a impacto en el rendimiento, alrededor de 3 veces lo que se ha empleado el procesador. En este caso el impacto es menor dado que la mejora del acceso a la memoria es superior a la mejora en los discos duros, aunque no ha mejorado tanto como los procesadores, estos han mejorado en muchos aspectos: ciclos por segundo, ciclos para resolver una instrucción, tamaño de las instrucciones, núcleos por procesador, etc.. La transferencia desde la memoria principal al procesador es de sólo 64 bytes cada vez y si hay que buscar un dato en la memoria principal, puede costar hasta 200 ciclos el traerlo de la memoria al procesador.Esto ha hecho que cada vez sea mayor la distancia entre la capacidad de procesamiento, la capacidad de transferencia o ancho de banda de la memoria, y la capacidad de lectura de los discos duros.


Mejoras de los Índices Columnstore
Denali: Índices Columnstore
Podemos diferenciar entre esperas para cargar las instrucciones, en donde SQL Server es bastante eficiente, y esperas para cargar los datos. Estas últimas esperas son originadas por la forma tradicional en que se guardan los datos. Los índices columnstore de los que hablamos en el articulo anterior mejoran esta parte, accediendo sólo a las columnas que se necesitan, lo que hace que sólo se carguen los datos que son útiles.

La única forma de mejorar más es cargar todavía menos datos, es decir, mediante compresión. En un almacén de datos es muy normal que los datos de muchas columnas se repitan y puedan comprimirse bastante. Los procesadores son muchos más rápidos que la memoria, que a su vez es mucho más rápida que los discos, por lo que el tiempo que se pueda emplear en descomprimir los datos está más que compensado por el que no se pierde en esperar al disco duro o a la memoria principal.

Microsoft además añade avances adicionales, que permanecen algunos en secreto y otros se relacionan con la forma en que se cargan las columnas y que permiten usar distintas columnas en varias partes del plan de una consulta para subir aún menos datos. Estos índices tienen sus limitaciones, pero con esto trabajaremos en un próximo artículo.Recuerda que son los Índices Columnstore accediendo a la primera parte del artículo.

> Ver primera parte del artículo
> Deseo conocer más sobre Índices Columnstore


 

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
¡Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *