SQL Server 2016
Query Store
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
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
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
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
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
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.
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.
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.
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.
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.
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
Query Store Arquitectura
13
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.
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.
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.
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
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
Impacto del Query Store
19
Habilitar Query Store
20
• ALTER DATABASE SET AdventureWorks2012
QUERY_STORE = ON;
Opciones de Query Store
21
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.
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.
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.
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.
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.
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.
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.
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
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 );
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;
Query Store
Query Store Built-in Reporting
33
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.
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.
Regressed Queries Report
36
Regressed Queries Report
37
Informe de consumo de recursos en general
38
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
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;
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;
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
Sys.query_store_query_text
43
• sys.query_store_query_text
Devuelve el texto de consulta de la instrucción
SQL
Sys.query_context_settings
44
• sys.query_context_settings
devuelve la configuración de contexto bajo el
cual se ejecuta la instrucción SQL.
Sys.query_context_settings
45
SELECT
qsq.query_id,
qsqt.query_sql_text,
qs.plan_handle
FROM sys.query_store_query qsq
INNER JOIN sys.dm_exec_query_stats qs
ON qsq.last_compile_batch_sql_handle = qs.sql_handle
INNER JOIN sys.query_store_query_text qsqt
ON qsq.query_text_id = qsqt.query_text_id
ORDER BY qsq.query_id
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.
Sys.query_store_plan
47
SELECT
plan_id,
query_id,
CAST(query_plan AS XML) AS 'Execution Plan'
FROM sys.query_store_plan;
Sys.query_store_runtime_stats
48
• Dentro de sys.query_store_runtime_stats , las
métricas de rendimiento de las consultas son
capturados y agregados
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;
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;
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
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
Forzado de Plan
53
Plan Forcing en SQL 2016
55
• EXEC sp_query_store_force_plan 136, 146;
Demostración
Query Store
56
SQL Server 2016
Query Store

Introducción al SQL Server 2016 Query Store

  • 1.
  • 2.
    Bienvenida • Ing. EduardoCastro, 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 SQL2016 – 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 generaly 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 rendimientono 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 Storesepuede ... 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áscomunes 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áscomunes 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áscomunes 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 QueryStore 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 elQuery 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
  • 13.
  • 14.
    Query StoreArquitectura 14 • ElQuery 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 QueryStore 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
  • 19.
  • 20.
    Habilitar Query Store 20 •ALTER DATABASE SET AdventureWorks2012 QUERY_STORE = ON;
  • 21.
  • 22.
    Examinando las opcionesdel 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 opcionesdel 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 opcionesdel 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 opcionesdel 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 opcionesdel 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 opcionesdel 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 opcionesdel 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 opcionespor 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 opcionespor 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 opcionespor 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;
  • 32.
  • 33.
  • 34.
    Query Store Built-inReporting 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 Storedereportes 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.
  • 36.
  • 37.
  • 38.
    Informe de consumode recursos en general 38
  • 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
  • 43.
  • 44.
    Sys.query_context_settings 44 • sys.query_context_settings devuelve laconfiguración de contexto bajo el cual se ejecuta la instrucción SQL.
  • 45.
    Sys.query_context_settings 45 SELECT qsq.query_id, qsqt.query_sql_text, qs.plan_handle FROM sys.query_store_query qsq INNERJOIN sys.dm_exec_query_stats qs ON qsq.last_compile_batch_sql_handle = qs.sql_handle INNER JOIN sys.query_store_query_text qsqt ON qsq.query_text_id = qsqt.query_text_id ORDER BY qsq.query_id
  • 46.
    Sys.query_store_plan 46 • sys.query_store_plan almacena informaciónsobre 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.
  • 47.
  • 48.
    Sys.query_store_runtime_stats 48 • Dentro desys.query_store_runtime_stats , las métricas de rendimiento de las consultas son capturados y agregados
  • 49.
    Top 10 consultasmá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_planAS 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
  • 53.
  • 54.
    Plan Forcing enSQL 2016 55 • EXEC sp_query_store_force_plan 136, 146;
  • 55.
  • 56.