sys.dm_exec_query_stats (Transact-SQL)
Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Devuelve estadísticas de rendimiento agregadas para los planes de consulta almacenados en caché en SQL Server. La vista contiene una fila por cada instrucción de consulta dentro del plan en caché, y la duración de las filas está ligada al propio plan. Cuando se quita un plan de la caché, se eliminan las filas correspondientes de esta vista.
Los resultados de sys.dm_exec_query_stats
pueden variar con cada ejecución, ya que los datos solo reflejan las consultas finalizadas y no las todavía en curso.
Para llamar a esta DMV desde un grupo de SQL dedicado en Azure Synapse Analytics o Analytics Platform System (PDW), use el nombre sys.dm_pdw_nodes_exec_query_stats
. Para el grupo de SQL sin servidor, use sys.dm_exec_query_stats
.
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
sql_handle |
varbinary(64) | Token que identifica de forma única el lote o el procedimiento almacenado del que forma parte la consulta.sql_handle , junto con statement_start_offset y statement_end_offset , se puede usar para recuperar el texto SQL de la consulta llamando a la función de administración dinámica de sys.dm_exec_sql_text . |
statement_start_offset |
int | Indica (en bytes y empezando por 0) la posición inicial de la consulta que la fila describe en el texto del lote o del objeto persistente. |
statement_end_offset |
int | Indica (en bytes y empezando por 0) la posición final de la consulta que la fila describe en el texto del lote o del objeto persistente. Para las versiones anteriores a SQL Server 2014 (12.x), un valor de -1 indica el final del lote. Los comentarios finales ya no están incluidos. |
plan_generation_num |
bigint | Número de secuencia que se puede usar para distinguir entre instancias de los planes después de una nueva compilación. |
plan_handle |
varbinary(64) | Token que identifica de forma única un plan de ejecución de consultas para un lote que se ha ejecutado y su plan reside en la memoria caché del plan o que se está ejecutando actualmente. Este valor se puede pasar a la función de administración dinámica sys.dm_exec_query_plan para obtener el plan de consulta. Siempre 0x000 cuando un procedimiento almacenado compilado de forma nativa consulta una tabla optimizada para memoria. |
creation_time |
datetime | Hora en que se compiló el plan. La hora se registra en el zona horaria actual. |
last_execution_time |
datetime | Hora a la que se inició la ejecución del plan por última vez. La hora se registra en el zona horaria actual. |
execution_count |
bigint | Número de veces que se ha ejecutado el plan desde que se compiló por última vez. |
total_worker_time |
bigint | Tiempo total de CPU, notificado en microsegundos (pero solo con precisión de milisegundos), consumido por las ejecuciones de este plan desde su compilación. En el caso de los procedimientos almacenados compilados de forma nativa, es posible que total_worker_time no sean precisos si muchas ejecuciones tardan menos de 1 milisegundos. |
last_worker_time |
bigint | Tiempo de CPU, notificado en microsegundos (pero solo con precisión de milisegundos), que se consumió la última vez que se ejecutó el plan. 1 |
min_worker_time |
bigint | Tiempo de CPU mínimo, notificado en microsegundos (pero solo con precisión de milisegundos), que este plan ha consumido alguna vez durante una sola ejecución. 1 |
max_worker_time |
bigint | Tiempo de CPU máximo, notificado en microsegundos (pero solo con precisión de milisegundos), que este plan ha consumido alguna vez durante una sola ejecución. 1 |
total_physical_reads |
bigint | Número total de lecturas físicas realizadas por las ejecuciones de este plan desde su compilación. Siempre 0 al consultar una tabla optimizada para memoria. |
last_physical_reads |
bigint | Número de lecturas físicas realizadas la última vez que se ejecutó el plan. Siempre 0 al consultar una tabla optimizada para memoria. |
min_physical_reads |
bigint | Número mínimo de lecturas físicas que ha realizado este plan durante una ejecución. Siempre 0 al consultar una tabla optimizada para memoria. |
max_physical_reads |
bigint | Número máximo de lecturas físicas que ha realizado este plan durante una ejecución. Siempre 0 al consultar una tabla optimizada para memoria. |
total_logical_writes |
bigint | Número total de escrituras lógicas realizadas por las ejecuciones de este plan desde su compilación. Siempre 0 al consultar una tabla optimizada para memoria. |
last_logical_writes |
bigint | Número de páginas del grupo de búferes sucias durante la ejecución más reciente del plan. Después de leer una página, la página se desfasa solo la primera vez que se modifica. Cuando una página se sucia, este número se incrementa. Las modificaciones posteriores de una página ya desfasada no afectan a este número. Este número siempre 0 al consultar una tabla optimizada para memoria. |
min_logical_writes |
bigint | Número mínimo de escrituras lógicas que ha realizado este plan durante una ejecución. Siempre 0 al consultar una tabla optimizada para memoria. |
max_logical_writes |
bigint | Número máximo de escrituras lógicas que ha realizado este plan durante una ejecución. Siempre 0 al consultar una tabla optimizada para memoria. |
total_logical_reads |
bigint | Número total de lecturas lógicas realizadas por las ejecuciones de este plan desde su compilación. Siempre 0 al consultar una tabla optimizada para memoria. |
last_logical_reads |
bigint | Número de lecturas lógicas realizadas la última vez que se ejecutó el plan. Siempre 0 al consultar una tabla optimizada para memoria. |
min_logical_reads |
bigint | Número mínimo de lecturas lógicas que ha realizado este plan durante una ejecución. Siempre 0 al consultar una tabla optimizada para memoria. |
max_logical_reads |
bigint | Número máximo de lecturas lógicas que ha realizado este plan durante una ejecución. Siempre 0 al consultar una tabla optimizada para memoria. |
total_clr_time |
bigint | Tiempo, notificado en microsegundos (pero solo precisos para milisegundos), consumidos en objetos de Common Language Runtime (CLR) de Microsoft .NET Framework mediante ejecuciones de este plan desde que se compiló. Los objetos CLR pueden ser procedimientos almacenados, funciones, desencadenadores, tipos y agregados. |
last_clr_time |
bigint | Tiempo, notificado en microsegundos (pero solo precisos para milisegundos) consumidos por la ejecución dentro de objetos CLR de .NET Framework durante la última ejecución de este plan. Los objetos CLR pueden ser procedimientos almacenados, funciones, desencadenadores, tipos y agregados. |
min_clr_time |
bigint | Tiempo mínimo, notificado en microsegundos (pero solo preciso para milisegundos), que este plan ha consumido nunca dentro de objetos CLR de .NET Framework durante una sola ejecución. Los objetos CLR pueden ser procedimientos almacenados, funciones, desencadenadores, tipos y agregados. |
max_clr_time |
bigint | Tiempo máximo, notificado en microsegundos (pero solo preciso en milisegundos), que este plan ha consumido nunca dentro de .NET Framework CLR durante una sola ejecución. Los objetos CLR pueden ser procedimientos almacenados, funciones, desencadenadores, tipos y agregados. |
total_elapsed_time |
bigint | Tiempo total transcurrido, notificado en microsegundos (pero solo con precisión de milisegundos), para las ejecuciones completadas de este plan. |
last_elapsed_time |
bigint | Tiempo transcurrido, notificado en microsegundos (pero solo con precisión de milisegundos), para la ejecución completada más recientemente de este plan. |
min_elapsed_time |
bigint | Tiempo mínimo transcurrido, notificado en microsegundos (pero solo con precisión de milisegundos), para cualquier ejecución completada de este plan. |
max_elapsed_time |
bigint | Tiempo máximo transcurrido, notificado en microsegundos (pero solo con precisión de milisegundos), para cualquier ejecución completada de este plan. |
query_hash |
Binary(8) | Valor hash binario que se calcula en la consulta y que se usa para identificar consultas con una lógica similar. Puede usar el hash de consulta para determinar el uso de recursos agregados para las consultas que solo se diferencian en los valores literales. |
query_plan_hash |
binary(8) | Valor hash binario que se calcula en el plan de ejecución de consulta y que se usa para identificar planes de ejecución de consulta similares. Puede usar el hash del plan de consulta para buscar el costo acumulativo de las consultas con planes de ejecución similares. Siempre 0x000 cuando un procedimiento almacenado compilado de forma nativa consulta una tabla optimizada para memoria. |
total_rows |
bigint | Número total de filas devueltas por la consulta. No puede ser NULL. Siempre 0 cuando un procedimiento almacenado compilado de forma nativa consulta una tabla optimizada para memoria. |
last_rows |
bigint | Número de filas devueltas por la última ejecución de la consulta. No puede ser NULL. Siempre 0 cuando un procedimiento almacenado compilado de forma nativa consulta una tabla optimizada para memoria. |
min_rows |
bigint | Número mínimo de filas que devuelve la consulta durante una ejecución. No puede ser NULL. Siempre 0 cuando un procedimiento almacenado compilado de forma nativa consulta una tabla optimizada para memoria. |
max_rows |
bigint | Número máximo de filas que devuelve la consulta durante una ejecución. No puede ser NULL. Siempre 0 cuando un procedimiento almacenado compilado de forma nativa consulta una tabla optimizada para memoria. |
statement_sql_handle |
varbinary(64) |
se aplica a: SQL Server 2014 (12.x) y versiones posteriores. Rellenado con valores que no son NULL solo si Almacén de consultas está activado y recopilando las estadísticas de esa consulta concreta. |
statement_context_id |
bigint |
se aplica a: SQL Server 2014 (12.x) y versiones posteriores. Rellenado con valores que no son NULL solo si Almacén de consultas está activado y recopilando las estadísticas de esa consulta concreta. |
total_dop |
bigint | Suma total del grado de paralelismo que usó este plan desde que se compiló. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
last_dop |
bigint | Grado de paralelismo cuando este plan se ejecutó la última vez. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
min_dop |
bigint | Grado mínimo de paralelismo que ha usado este plan durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
max_dop |
bigint | Grado máximo de paralelismo que ha usado este plan durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
total_grant_kb |
bigint | Cantidad total de concesión de memoria reservada en KB que recibió este plan desde que se compiló. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
last_grant_kb |
bigint | Cantidad de concesión de memoria reservada en KB cuando este plan se ejecutó la última vez. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
min_grant_kb |
bigint | Cantidad mínima de concesión de memoria reservada en KB que este plan ha recibido durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
max_grant_kb |
bigint | Cantidad máxima de concesión de memoria reservada en KB que este plan ha recibido durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
total_used_grant_kb |
bigint | Cantidad total de concesión de memoria reservada en KB que usó este plan desde que se compiló. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
last_used_grant_kb |
bigint | Cantidad de concesión de memoria usada en KB cuando este plan se ejecutó la última vez. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
min_used_grant_kb |
bigint | Cantidad mínima de concesión de memoria usada en KB que este plan ha usado durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
max_used_grant_kb |
bigint | Cantidad máxima de concesión de memoria usada en KB que este plan ha usado durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
total_ideal_grant_kb |
bigint | Cantidad total de concesión de memoria ideal en KB este plan estimado desde que se compiló. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
last_ideal_grant_kb |
bigint | Cantidad de concesión de memoria ideal en KB cuando este plan se ejecutó la última vez. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
min_ideal_grant_kb |
bigint | Cantidad mínima de concesión de memoria ideal en KB que este plan ha estimado durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
max_ideal_grant_kb |
bigint | Cantidad máxima de concesión de memoria ideal en KB que este plan ha estimado durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
total_reserved_threads |
bigint | La suma total de subprocesos paralelos reservados que ha usado este plan desde que se compiló. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
last_reserved_threads |
bigint | Número de subprocesos paralelos reservados cuando este plan se ejecutó la última vez. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
min_reserved_threads |
bigint | Número mínimo de subprocesos paralelos reservados que ha usado este plan durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
max_reserved_threads |
bigint | Número máximo de subprocesos paralelos reservados que ha usado este plan durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
total_used_threads |
bigint | La suma total de subprocesos paralelos usados que ha usado este plan desde que se compiló. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
last_used_threads |
bigint | Número de subprocesos paralelos usados cuando este plan se ejecutó la última vez. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
min_used_threads |
bigint | El número mínimo de subprocesos paralelos usados que ha usado este plan durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
max_used_threads |
bigint | Número máximo de subprocesos paralelos usados que ha usado este plan durante una ejecución. Siempre 0 para consultar una tabla optimizada para memoria.se aplica a: SQL Server 2016 (13.x) y versiones posteriores. |
total_columnstore_segment_reads |
bigint | Suma total de segmentos de almacén de columnas leídos por la consulta. No puede ser NULL. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_reads |
bigint | Número de segmentos de almacén de columnas leídos por la última ejecución de la consulta. No puede ser NULL. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_reads |
bigint | Número mínimo de segmentos de almacén de columnas leídos por la consulta durante una ejecución. No puede ser NULL. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_reads |
bigint | Número máximo de segmentos de almacén de columnas leídos por la consulta durante una ejecución. No puede ser NULL. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
total_columnstore_segment_skips |
bigint | Suma total de segmentos de almacén de columnas omitidos por la consulta. No puede ser NULL. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_skips |
bigint | Número de segmentos de almacén de columnas omitidos por la última ejecución de la consulta. No puede ser NULL. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_skips |
bigint | Número mínimo de segmentos de almacén de columnas que ha omitido la consulta durante una ejecución. No puede ser NULL. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_skips |
bigint | Número máximo de segmentos de almacén de columnas que ha omitido la consulta durante una ejecución. No puede ser NULL. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
total_spills |
bigint | Número total de páginas derramadas por la ejecución de esta consulta desde que se compiló. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
last_spills |
bigint | Número de páginas derramadas la última vez que se ejecutó la consulta. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
min_spills |
bigint | Número mínimo de páginas que esta consulta ha derramado durante una sola ejecución. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
max_spills |
bigint | Número máximo de páginas que esta consulta ha derramado durante una sola ejecución. Se aplica a: A partir de SQL Server 2016 (13.x) SP2 y SQL Server 2017 (14.x) CU3 |
pdw_node_id |
int | Identificador del nodo en el que se encuentra esta distribución. Se aplica a: Azure Synapse Analytics, Sistema de la plataforma de análisis (PDW) |
total_page_server_reads |
bigint | Número total de lecturas de servidor de páginas remotas realizadas por ejecuciones de este plan desde que se compiló. Se aplica a: Hiperescala de Azure SQL Database |
last_page_server_reads |
bigint | Número de lecturas del servidor de páginas remotos realizada la última vez que se ejecutó el plan. Se aplica a: Hiperescala de Azure SQL Database |
min_page_server_reads |
bigint | El número mínimo de servidores de páginas remotos lee que este plan ha realizado alguna vez durante una sola ejecución. Se aplica a: Hiperescala de Azure SQL Database |
max_page_server_reads |
bigint | El número máximo de servidores de páginas remotos lee que este plan se ha realizado durante una sola ejecución. Se aplica a: Hiperescala de Azure SQL Database |
Nota:
1 Para los procedimientos almacenados compilados de forma nativa cuando la recopilación de estadísticas está habilitada, el tiempo de trabajo se recopila en milisegundos. Si la consulta se ejecuta en menos de un milisegundo, el valor es 0
.
Permisos
SQL Server 2019 (15.x) y versiones anteriores, y Azure SQL Managed Instance, requieren VIEW SERVER STATE
permiso.
SQL Server 2022 (16.x) y versiones posteriores requieren VIEW SERVER PERFORMANCE STATE
permiso en el servidor.
En Azure SQL Database VIEW DATABASE STATE
en la base de datos o la pertenencia en el rol del servidor ##MS_ServerStateReader##
.
Comentarios
Cuando se completa una consulta, se actualizan las estadísticas en la vista.
Ejemplos
A Búsqueda de las consultas TOP N
El siguiente ejemplo devuelve información acerca de las cinco consultas principales clasificadas en función del tiempo promedio de CPU. Este ejemplo agrega las consultas según su hash de consulta para que las consultas lógicamente equivalentes se agrupen según su consumo acumulado de los recursos. La columna Sample_Statement_Text muestra un ejemplo de la estructura de consulta que coincide con el hash de consulta, pero debe leerse sin tener en cuenta los valores específicos de la instrucción . Por ejemplo, si una instrucción contiene WHERE Id = 5
, puede leerla en su forma más genérica: WHERE Id = @some_value
.
SELECT TOP 5
query_stats.query_hash AS Query_Hash,
SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS Avg_CPU_Time,
MIN(query_stats.statement_text) AS Sample_Statement_Text
FROM (
SELECT QS.*,
SUBSTRING(ST.text, (QS.statement_start_offset / 2) + 1, (
(
CASE statement_end_offset
WHEN - 1
THEN DATALENGTH(ST.text)
ELSE QS.statement_end_offset
END - QS.statement_start_offset
) / 2
) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS QS
CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) AS ST
) AS query_stats
GROUP BY query_stats.query_hash
ORDER BY 2 DESC;
B. Devolver agregados de recuento de filas para una consulta
En el ejemplo siguiente se devuelve información de agregado de recuento de filas (filas totales, filas mínimas, filas máximas y últimas filas) para las consultas.
SELECT qs.execution_count,
SUBSTRING(qt.text, qs.statement_start_offset / 2 + 1, (
CASE
WHEN qs.statement_end_offset = - 1
THEN LEN(CONVERT(NVARCHAR(max), qt.text)) * 2
ELSE qs.statement_end_offset
END - qs.statement_start_offset
) / 2) AS query_text,
qt.dbid,
dbname = DB_NAME(qt.dbid),
qt.objectid,
qs.total_rows,
qs.last_rows,
qs.min_rows,
qs.max_rows
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE qt.text LIKE '%SELECT%'
ORDER BY qs.execution_count DESC;