sys.dm_exec_query_stats (Transact-SQL)

Se aplica a: síSQL Server (todas las versiones admitidas) SíAzure SQL Database

Devuelve estadísticas de rendimiento de agregado para planes de consulta 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.

Nota

  • 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 que siguen en marcha.
  • Para llamar a esto desde un grupo SQL dedicado en Azure Synapse Analytics o , use el nombre Sistema de la plataforma de análisis (PDW) 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) Es un 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 pueden usar para recuperar el texto SQL de la consulta llamando a la función de administración dinámica 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 SQL Server 2014 (12.x) a , 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) Es un 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 caché del plan o 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.

Será siempre 0x000 cuando un procedimiento almacenado nativo consulte una tabla optimizada para memoria.
creation_time datetime Hora en que se compiló el plan.
last_execution_time datetime Hora a la que se inició la ejecución del plan por última vez.
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.

Para los procedimientos almacenados compilados de forma nativa, total_worker_time puede no ser exacto si varias ejecuciones tardan menos de 1 milisegundo.
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.

Será 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.

Será 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.

Será 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.

Será 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.

Será siempre 0 al consultar una tabla optimizada para memoria.
last_logical_writes bigint Número de páginas del grupo de búferes que se instalaron durante la ejecución completada más recientemente del plan.

Una vez leída una página, la página solo se desducia la primera vez que se modifica. Cuando una página se desducia, este número se incrementa. Las modificaciones posteriores de una página que ya está desduciado no afectan a este número.

Este número siempre será 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.

Será 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.

Será 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.

Será 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.

Será 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.

Será 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.

Será siempre 0 al consultar una tabla optimizada para memoria.
total_clr_time bigint Tiempo, notificado en microsegundos (pero solo preciso en milisegundos), consumido dentro de objetos de Common Language Runtime (CLR) por las ejecuciones de este plan desde que Microsoft .NET Framework se compiló. Los objetos CLR pueden ser procedimientos almacenados, funciones, desencadenadores, tipos y agregados.
last_clr_time bigint Tiempo, notificado en microsegundos (pero solo con precisión de milisegundos), consumido por la ejecución dentro de los 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 de CPU mínimo, notificado en microsegundos (pero solo con precisión de milisegundos), que este plan ha consumido alguna vez 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 de CPU máximo, notificado en microsegundos (pero solo con precisión de milisegundos), que este plan ha consumido alguna vez dentro del CLR de .NET Framework 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.

Será siempre 0x000 cuando un procedimiento almacenado nativo consulte una tabla optimizada para memoria.
total_rows bigint Número total de filas devueltas por la consulta. No puede ser NULL.

Será siempre 0 cuando un procedimiento almacenado nativo consulte 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.

Será siempre 0 cuando un procedimiento almacenado nativo consulte una tabla optimizada para memoria.
min_rows bigint Número mínimo de filas devueltas por la consulta durante una ejecución. No puede ser NULL.

Será siempre 0 cuando un procedimiento almacenado nativo consulte una tabla optimizada para memoria.
max_rows bigint Número máximo de filas devueltas por la consulta durante una ejecución. No puede ser NULL.

Será siempre 0 cuando un procedimiento almacenado nativo consulte una tabla optimizada para memoria.
statement_sql_handle varbinary(64) Válido para : SQL Server 2014 (12.x) y versiones posteriores.

Se rellena con valores distintos de NULL solo si Almacén de consultas está activado y recopilando las estadísticas de esa consulta concreta.
statement_context_id bigint Válido para : SQL Server 2014 (12.x) y versiones posteriores.

Se rellena con valores distintos de NULL solo si Almacén de consultas está activado y recopilando las estadísticas de esa consulta concreta.
total_dop bigint La suma total de grado de paralelismo que usó este plan desde que se compiló. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
last_dop bigint El grado de paralelismo cuando este plan se ejecutó la última vez. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
min_dop bigint El grado mínimo de paralelismo que este plan ha usado alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
max_dop bigint El grado máximo de paralelismo que este plan ha usado alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
total_ideal_grant_kb bigint Cantidad total de concesión de memoria ideal en KB que este plan calculó desde que se compiló. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
total_reserved_threads bigint La suma total de subprocesos paralelos reservados que este plan ha usado desde que se compiló. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
last_reserved_threads bigint Número de subprocesos paralelos reservados cuando este plan se ejecutó por última vez. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
min_reserved_threads bigint Número mínimo de subprocesos paralelos reservados que este plan ha usado alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
max_reserved_threads bigint Número máximo de subprocesos paralelos reservados que este plan ha usado alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
total_used_threads bigint La suma total de subprocesos paralelos usados que este plan ha usado desde que se compiló. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
last_used_threads bigint Número de subprocesos paralelos usados cuando este plan se ejecutó por última vez. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
min_used_threads bigint Número mínimo de subprocesos paralelos usados que este plan ha usado alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : SQL Server 2016 (13.x) y versiones posteriores.
max_used_threads bigint Número máximo de subprocesos paralelos usados que este plan ha usado alguna vez durante una ejecución. Siempre será 0 para consultar una tabla optimizada para memoria.

Válido para : 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 omitido 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 omitido 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 omitido alguna vez 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_skips bigint Número máximo de segmentos de almacén de columnas omitido 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_spills bigint Número total de páginas desbordadas 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 desbordadas 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 desbordado alguna vez 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 desbordado alguna vez 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: Azure SQL Database Hiperescala
last_page_server_reads bigint Número de lecturas de servidor de páginas remotas realizadas la última vez que se ejecutó el plan.

Se aplica a: Azure SQL Database Hiperescala
min_page_server_reads bigint Número mínimo de lecturas de servidor de páginas remotas que este plan ha realizado alguna vez durante una sola ejecución.

Se aplica a: Azure SQL Database Hiperescala
max_page_server_reads bigint Número máximo de lecturas de servidor de páginas remotas que este plan ha realizado alguna vez durante una sola ejecución.

Se aplica a: Azure SQL Database Hiperescala

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 será 0.

Permisos

En SQL Server y SQL Instancia administrada, requiere VIEW SERVER STATE permiso.

En SQL Database objetivos de servicio Básico, S0 y S1, y para las bases de datos de grupos elásticos , se requiere la cuenta de administrador del servidor, la cuenta de administrador de Azure Active Directory o la pertenencia al rol de ##MS_ServerStateReader## servidor. En todos los demás SQL Database de servicio, se requiere el permiso en la base de datos o la pertenencia VIEW DATABASE STATE ##MS_ServerStateReader## al rol de servidor.

Observaciones

Cuando se completa una consulta, se actualizan las estadísticas en la vista.

Ejemplos

A. Buscar 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.

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 "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 recuentos 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;  

Consulte también

Funciones y vistas de administración dinámica relacionadas con la ejecución (Transact-SQL)
sys.dm_exec_sql_text (Transact-SQL)
sys.dm_exec_query_plan (Transact-SQL)
sys.dm_exec_procedure_stats (Transact-SQL)
sys.dm_exec_trigger_stats (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL)