2. Bienvenida
• Ing. Eduardo Castro, PhD
• MVP de Microsoft SQL Server
• PASS Regional de Mentor
• PASS Board of Directors
• ecastro@simsasys.com
• http://www.youtube.com/eduardocastrom
3. Material de Referencia
SQL 2016 – What’s New? David Cobb
SQL Server Evolution. Lindsey Allen
The SQL Server 2016 Query Store: Overview and Architecture. Enrico
van de Laar
4. Agenda
4
• Información general y de Query Store
Arquitecture
• Query Store Reporting
• Acceso a la información de consulta Store a
través de DMV
• Forzar planes de ejecución utilizando el Query
Store
• Analizar el rendimiento de Query Store
5. Cuando el rendimiento no es bueno ...
Base de datos
no funciona
Web site
está caído
Imposible de
predecir/Cual
es la causa?
Problema
desempeño
temporal Regresión
causada por
nueva versión
Actualizació
n de DB
6. Con Query Storese puede ...
Buscar y corregir
las regresiones del
plan
Identificar los
principales
consumidores de
recursos
Reducir riesgo
actualización de
SQL Server
Profundamente
analizar los
patrones de carga
de trabajo
7. el Query Store
7
• El Query Store es una característica que nos
puede ayudar a solucionar problemas de
rendimiento de las consultas, captura de
información de ejecución de la consulta, tales
como el número de ejecuciones o la duración
promedio de una consulta.
• El Query Store también se captura cada plan de
ejecución que se ha generado para una consulta
específica y se puede entonces decidir qué plan
de ejecución desea que SQL Server utilice para
esa consulta específica.
8. Los usos más comunes para el Query Store
8
• Encontrar y corregir rápidamente una regresión
desempeño de los planes forzando el plan de
consulta previo.
• Forzar las consultas que recientemente han
retrocedido en el rendimiento debido a cambios
en el plan de ejecución.
• Determinar el número de veces que una
consulta se ejecuta en una ventana de tiempo
dado, ayuda a un DBA en problemas de
recursos de rendimiento y en la resolución de
problemas.
9. Los usos más comunes para el Query Store
9
• Identificar las principales n consultas (por el
tiempo de ejecución, el consumo de memoria,
etc.) en los últimos x horas.
• Auditar la historia de los planes de ejecución
para una consulta determinada.
• Analizar los recursos (CPU, E/S y la memoria) los
patrones de uso de una base de datos en
particular.
10. Los usos más comunes para el Query Store
10
• A pesar de que ya es posible para nosotros realizar
muchas de las mismas acciones que hace el Query
Store en las versiones anteriores de SQL Server
• La captura de los contadores de rendimiento
específicos de tiempo de ejecución de consulta o
forzar planes de ejecución es una tarea compleja y
especializada.
• El Query Store hace que estas acciones mucho más
fácil de usar y disponible a todo el mundo sin
necesidad de volver a escribir cualquier pregunta.
11. Ventajas del Query Store
11
• El Query Store se integra directamente en SQL
Server, esto significa que puede capturar la
información de tiempo de ejecución de consulta
directamente en el nivel de la fuente
• Sin el Query Store con frecuencia dependemos del
caché del plan, lugar donde se almacenan los
planes de ejecución en memoria, cuando es
necesario analizar los planes de ejecución de la
consulta.
• Sin embargo, si se reinicia SQL Server, todos los
planes de ejecución serán removidos de la caché y
se ven obligados a empezar de nuevo.
12. Ventajas de el Query Store
12
• El Query Store, en cambio, almacena la
información que captura en el disco, lo que
significa que un reinicio de SQL Server no afecta
a ninguna información que ha sido capturado
en el Query Store
• El Query Store se puede habilitar en una base
de datos individual
• Una gran cantidad de información está
disponible directamente a través de reportes de
consulta integrados
14. Query StoreArquitectura
14
• El Query Store consiste en realidad dos “stores",
• El Plan Store y el Runtime Stats Store.
• Estos “stores” son objetos en memoria que
contienen información de la consulta.
15. Query Store Arquitectura
15
• Cuando una consulta se ejecuta en una base de
datos que tiene habilitada el Query Store, el plan de
la consulta compilado se escribe en el Query Store
Plan y la información de tiempo de ejecución de la
consulta se guarda en el Runtime Stats Store.
• Esta información se almacena inicialmente en
memoria. Después de un intervalo específico la
información escribe en el disco de forma asíncrona
para guardar la información.
• El Query Store escribe los planes de ejecución y las
estadísticas de tiempo de ejecución en Primary
Filegroup de la base de datos que ejecútó la
consulta.
16. Query Store Arquitectura
dieciséis
• Al guardar los planes de ejecución y las estadísticas
de tiempo de ejecución en el disco, la información
dentro de el Query Store no se pierde cada vez que
se produce un reinicio de SQL Server.
• Esto es más valioso que el análisis de los planes de
ejecución dentro del caché, ya que el caché del plan
estará vacía de nuevo cada vez que se reinicie SQL
Server.
• Lo mismo ocurre con la sys.dm_exec_query_stats
DMV, que se utiliza con frecuencia para analizar la
información de tiempo de ejecución de la consulta.
Este DMV también se restablecerá después de un
reinicio de SQL Server.
17. Query Store Flush
17
• Por defecto se guarda a disco con intervalo que
se establece en 15 minutos, esto provoca una
sobrecarga de rendimiento promedio de 3-5%
cuando se ha activado el Query Store.
• Cuanto menor sea el intervalo, mayor será el
impacto en el rendimiento
• Nuevos planes de ejecución que son capturados
por primera vez por el Query Store se guardan
en disco de forma más rápida que planes de
ejecución que ya existen dentro de el Query
Store
18. Impacto del Query Store
18
• Existe una Table Defined Function (TDF) que
toma datos todavía en la memoria y también
información que ya fue persistida en disco
• TDF (QUERY_STORE_RUNTIME_STATS_IN_MEM)
toma los datos de la memoria y un Clustered
Index Scan en el plan_persist_runtime_stats que
toma los datos desde el disco
22. Examinando las opciones del Query Store
22
• " Operation Mode (Actual)” no se puede
cambiar, ya que sólo indica el modo actual deñ
Query Store. El valor puede ser Off, Read Write
or Read.
• Cuando el Query Store tiene un modo de Read
no se guardan nuevos planes de ejecución o las
estadísticas de tiempo de ejecución de la
consulta.
23. Examinando las opciones del Query Store
23
• El " Data Flush Interval (Minutes)” le permite establecer el
intervalo de la rapidez que se guarda la información
• Los Execution Plans y los Query Runtime Statistics se están
guardando de la memoria en el disco. Por defecto esta
opción se establece en 15 minutos.
• Cambiar el intervalo en un valor más bajo significa que la
información de Query Store dentro de la memoria de SQL
Server se escribe en el disco más rápido, esto puede tener un
impacto negativo en el rendimiento de la Instancia.
• Establecer el valor en un intervalo más alto significa que el
memory flush es menor, pero también significa más
información del Query Store que reside en la memoria se
perderán cuando si se produce un reinicio de SQL Server.
24. Examinando las opciones del Query Store
24
• “Statistics Collection Interval" le permite configurar un
nuevo intervalo.
• Éste le permite configurar el nivel de granularidad de las
estadísticas de tiempo de ejecución. Por defecto se
establece en 1 hora.
• Básicamente esto significa que se establece el intervalo
de agregación de las estadísticas de tiempo de
ejecución de consulta dentro de el Query Store.
• Cuanto menor sea el valor de esta opción más fina es la
granularidad de las estadísticas de tiempo de ejecución,
pero esto también significa que más intervalos se
producen y se requiere por lo tanto más espacio para
almacenar las estadísticas de consulta de tiempo de
ejecución en el disco.
25. Examinando las opciones del Query Store
25
• El " Max Size (MB)” le permite configurar el tamaño
máximo de el Query Store.
• Por defecto, este valor se establece en 100 MB. Una
cosa importante a tener en cuenta es que los datos
dentro de el Query Store se almacena dentro de la
Primary File Group de la base de datos que tiene
habilitada el Query Store.
• Cambiar la opción por un valor más alto le permitirá
almacenar más datos del Query Store pero también
significa que su base de datos crecerá.
• Cada vez que el Query Store llega al tamaño máximo
configurado por esta opción el modo de operación
cambiará automáticamente a sólo lectura y no se
recolectarán nuevos datos.
26. Examinando las opciones del Query Store
26
• La opción " Query Store Capture Mode" permite filtrar
las consultas con los tiempos de ejecución muy bajo.
• Por defecto, la opción se establece en “All” lo que
significa cada consulta ejecutada en contra de la base
de datos se registra en el Query Store.
• Al establecer la opción en “Auto” el Query Store filtrará
consultas insignificantes.
• Qué consultas se filtran está determinada por un
proceso interno y no tenemos ninguna influencia sobre
ella. El coste final de esta opción es Ninguno cual
significa que no hay nuevos planes de ejecución o las
estadísticas de tiempo de ejecución de consulta son
capturados.
27. Examinando las opciones del Query Store
27
• " Size Based Cleanup Mode " se puede
configurar para que automáticamente el Query
Store limpie los datos una vez que alcanza el
90% del tamaño máximo de Query Store
• La limpieza eliminará los datos de consulta más
antigua y menos costosa y se detiene la
limpieza en el 80% del “Max Size (MB)” .
• Por defecto esta opción está desactivada. Si se
establece en Auto permitirá a la limpieza
automática.
28. Examinando las opciones del Query Store
28
• "Stale Query Threshold (Days)” establece cómo
los datos de consulta es retenida dentro de el
Query Store.
• Por defecto, la configuración se establece en
367 días. El valor de esta opción debe reflejar
sus necesidades de análisis históricos.
• Si no necesita almacenar información de
consulta por 376 días, pero por un período de
tiempo más corto se puede bajar esta opción
por lo que no está perdiendo espacio dentro de
el Query Store.
29. Query Store opciones por TSQL
29
GUI Option T-SQL Option
Operation Mode (Requested) OPERATION_MODE
Data Flush Interval (Minutes) DATA_FLUSH_INTERVAL_SECONDS
Statistics Collection Interval INTERVAL_LENGHT_MINUTES
Max Size (MB) MAX_STORAGE_SIZE_MB
Query Store Capture Mode QUERY_CAPTURE_MODE
Size Based Cleanup Mode SIZE_BASED_CLEANUP_MODE
Stale Query Threshold (Days) CLEANUP_POLICY (STALE_QUERY_THRESHOLD_DAYS)
MAX_PLANS_PER_QUERY
30. Query Store opciones por TSQL
30
• ALTER DATABASE [db_name]SET
QUERY_STORE ( [Query Store options] );
• ALTER DATABASE AdventureWorksSET
QUERY_STORE ( MAX_STORAGE_SIZE_MB =
250 );
31. Query Store opciones por TSQL
31
ALTER DATABASE AdventureWorks
SET QUERY_STORE
(
MAX_STORAGE_SIZE_MB = 250,
SIZE_BASED_CLEANUP_MODE = AUTO,
CLEANUP_POLICY =
(STALE_QUERY_THRESHOLD_DAYS = 30)
);
-- Purge Query Data
ALTER DATABASE [db_name] SET QUERY_STORE
CLEAR;
34. Query Store Built-in Reporting
34
• Regressed Queries. Una 'consulta ha retrocedido' si
recibió un plan de ejecución peor al que tenía antes.
• Este reporte muestra todas las consultas que han
tenido su plan de ejecución retrocedido en el
tiempo.
• Overall Resource Consumption. Muestra un
resumen de las estadísticas de tiempo de ejecución
de las consultas durante un intervalo de tiempo
específico. Todas las estadísticas de las consultas
que se han ejecutado dentro del intervalo de
tiempo específico se agregan para dar una visión
general del rendimiento de la consulta.
35. Built-in Query Storede reportes
35
• Top Resource Consuming Queries. Muestra las
consultas más caros (sobre la base de criterios
de selección personalizados) que se ejecutaron
durante un intervalo de tiempo específico.
• Tracked Queries. Muestra las estadísticas de
tiempo de ejecución para la ejecución de la
consulta, y le permite inspeccionar los diversos
planes de ejecución de una consulta específica.
39. DMV Query Store
39
• Nuevos DMV que se introdujeron en SQL Server
2016 para soportar el Query Store
Sys.database_query_store_options
Sys.query_store_query
Sys.query_store_query_text
Sys.query_context_settings
Sys.query_store_plan
Sys.query_store_runtime_stats
Sys.query_store_runtime_stats_interval
40. DMV Query Store
40
• El DMV sys.query_store_query se registra a nivel
de la instrucción SQL.
-- Empty the Query Store
ALTER DATABASE AdventureWorks SET QUERY_STORE CLEAR;
-- Statement 1
SELECT TOP 100 *
FROM Person.Address;
-- Statement 2
SELECT TOP 100 *
FROM Sales.SalesOrderDetail;
41. DMV Query Store
41
-- Query sys.query_store_query
SELECT
query_id,
qt.query_sql_text AS 'Statement Text',
[text] AS 'Query Batch Text'
FROM sys.query_store_query q
CROSS APPLY
sys.dm_exec_sql_text(last_compile_batch_sql_handle)
INNER JOIN sys.query_store_query_text qt
ON q.query_text_id = qt.query_text_id;
42. DMV Query Store
42
• context_settings_id
Este número enlaza el sys.query_store_query DMV
para el sys.query_context_settings
• sys.query_context_settings
Registra información sobre el contexto en el que
se ejecuta la consulta
• last_compile_batch_sql_handle
Devuelve el query text handle de la consulta SQL
46. Sys.query_store_plan
46
• sys.query_store_plan
almacena información sobre los planes de
ejecución que está relacionado con las
consultas que son capturados dentro de el
Query Store.
• Devuelve información, tales como la versión de
motor utilizaqdo, el nivel de compatibilidad y si
el plan era trivial.
49. Top 10 consultas más caros basados en
tiempo de ejecución promedio
49
SELECT TOP 10
qt.query_sql_text,
CAST(query_plan AS XML) AS 'Execution Plan',
rs.avg_duration
FROM sys.query_store_plan qp
INNER JOIN sys.query_store_query q
ON qp.query_id = q.query_id
INNER JOIN sys.query_store_query_text qt
ON q.query_text_id = qt.query_text_id
INNER JOIN sys.query_store_runtime_stats rs
ON qp.plan_id = rs.plan_id
ORDER BY rs.avg_duration DESC;
50. Consultar planes paralelos
50
SELECT
qt.query_sql_text,
CAST(query_plan AS XML) AS 'Execution Plan',
rs.avg_duration
FROM sys.query_store_plan qp
INNER JOIN sys.query_store_query q
ON qp.query_id = q.query_id
INNER JOIN sys.query_store_query_text qt
ON q.query_text_id = qt.query_text_id
INNER JOIN sys.query_store_runtime_stats rs
ON qp.plan_id = rs.plan_id
WHERE rs.last_dop > 1;
51. Regresión de planes
51
• Plan de regresión ocurre cuando el optimizador
de consultas de SQL Server compila un nuevo
plan de ejecución para una consulta que ejecuta
(mucho) peor que el anterior plan de ejecución
para esa misma consulta.
• Hay muchas razones por las que el optimizador
de consultas piensa que se necesita un nuevo
plan. Algunos ejemplos incluyen un cambio en
el número de filas dentro de una tabla, una
adición o eliminación de un índice o un cambio
en el esquema de la tabla
52. Regresión de planes
52
• Plan de ejecución con id 113 ejecuta mucho
peor, en función de su duración, que el plan con
id 114