Query Store en SQL Server. Parte I

GPS Open Source News

Hola a todos, hoy os vamos a hablar de una nueva herramienta que ha surgido en SQL Server, con la version 2016, para ayudar a mejorar la performance de las querys ejecutadas contra las BBDD de la instancia. Esta herramienta es el Query Store. Haremos una serie de entradas en el blog para la comprensión y manejo de la herramienta

¿Qué es Query Store?

Query Store es un repositorio dentro de la BBDD donde se encuentre activado. En él se almacenan todas las instrucciones DML (Data Manipulation language) ejecutadas sobre esa BBDD. Estas instrucciones leen o manipulan datos, como SELECT, INSERT, UPDATE, DELETE, MERGE o instrucciones BULK para inserciones masivas.

En el repositorio se almacenan los planes de ejecución de cada una de las querys. También se almacenan otros datos estadísticos como el número de ejecuciones, los tiempos máximo y medio que tardan, los datos de consumos de CPU e I/O, etc. Por último, también se guarda información acerca de los eventos de espera generados. Toda esta información es crucial para analizar el rendimiento del sistema.

Para trabajar con Query Store es necesario tener SQL Management Studio también en versión 2016 o superior. También es necesario tener el permiso VIEW DATABASE STATE asignado.
Para asignar este permiso se puede utilizar el comando:

USE <database_name>
GO
GRANT VIEW DATABASE STATE TO <USER>
GO

Query Store se puede habilitar en todas las versiones de SQL Server, tanto en Standard, Enterprise… Dentro de la instancia, se puede habilitar en cualquier BBDD, excepto en las BBDD de sistema master y tempdb.

Arquitectura de Query Store

En la documentación oficial de MSDN se puede encontrar un diagrama con la arquitectura de esta herramienta, en el siguiente enlace:
https://docs.microsoft.com/es-es/sql/relational-databases/performance/how-query-store-collects-data?view=sql-server-2017#query-processing

 

¿Cómo funciona Query Store?

Query Store realiza el almacenamiento de los datos de rendimiento de las querys en un conjunto de tablas del sistema, a las que se puede acceder por medio de DMV’s o vistas del sistema.

Cada vez que se ejecuta una instrucción DML sobre la BBDD habilitada, comienza un procedimiento paralelo a la ejecución propia de la query donde el primer paso es: cuando se compila, comprobar si ya se ha compilado anteriormente.

En el caso de que sea la primera compilación, tanto el texto de la consulta como su plan de ejecución se guardan en el Query Store.

Si no es la primera compilación, se actualizan los datos de rendimiento de la query. Si cambia el plan de ejecución, se añade a esa query un segundo almacén con este nuevo plan, pero sin borrar el anterior, y se almacenan los datos de ejecución de la query.

Estos datos de rendimiento de las querys se almacenan cuando termina la ejecución. Con esta forma de trabajo, se mantienen para una query todos los planes de ejecución que ha utilizado, y las estadísticas para cada uno de ellos.

El procedimiento de recolección de datos de Query Store se puede ver en la imagen, proporcionada por la documentación de Microsoft en el link anterior.

query store

Objetivo de esta herramienta

Query Store se crea para dar solución a problemas de rendimiento a nivel de querys, y en una BBDD puede haber un gran número de querys DML ejecutándose en un momento determinado.

Si toda esta información se escribiera en tiempo real en el sistema, el mismo procedimiento de Query Store podría ser una carga para el sistema. Para que no haya problemas de rendimiento provocados la propia herramienta, todos los datos capturados se almacenan primero en memoria, y posteriormente se almacenan en las tablas internas del sistema de forma asíncrona.

En próximas entradas iremos viendo como habilitarlo y cómo se puede utilizar.

Esperamos que os sea de utilidad. Si quieres que revisemos tu sistema de SQL Server, puedes obtener más información en este enlace.

Un saludo,

Equipo de Base de datos