sys.dm_exec_query_memory_grants (Transact-SQL)

Devuelve información acerca de las consultas que han adquirido una concesión de memoria o que aún requieren una concesión de memoria para ejecutarse. Las consultas que no están a la espera de una concesión de memoria no aparecerán en esta vista.

Nombre de columna

Tipo de datos

Descripción

session_id

smallint

Id. (SPID) de la sesión en la que se está ejecutando esta consulta.

request_id

int

Id. de la solicitud. Es único en el contexto de la sesión.

scheduler_id

int

Id. del programador que programa esta consulta.

dop

smallint

Grado de paralelismo de esta consulta.

request_time

datetime

Fecha y hora a la que esta consulta solicitó la concesión de memoria.

grant_time

datetime

Fecha y hora a la que se concedió la memoria para esta consulta. Es NULL si aún no se ha concedido la memoria.

requested_memory_kb

bigint

Memoria solicitada total en kilobytes.

granted_memory_kb

bigint

Memoria total realmente otorgada en kilobytes. Puede ser NULL si aún no se ha concedido la memoria. En una situación típica, este valor debe ser igual a requested_memory_kb. En la creación de índices, el servidor puede permitir memoria adicional a petición además de la memoria concedida inicialmente.

required_memory_kb

bigint

Memoria mínima necesaria para ejecutar esta consulta en kilobytes. requested_memory_kb es igual o mayor que esta cantidad.

used_memory_kb

bigint

Memoria física usada en este momento en kilobytes.

max_used_memory_kb

bigint

Memoria física máxima usada hasta este momento en kilobytes.

query_cost

float

Costo estimado de la consulta.

timeout_sec

int

Tiempo de espera en segundos antes de que esta consulta abandone la solicitud de concesión de memoria.

resource_semaphore_id

smallint

Id. no único del semáforo de recursos al que está esperando esta consulta.

NotaNota
Este Id. es único en versiones de SQL Server anteriores a SQL Server 2008. Este cambio puede afectar a la solución de problemas de ejecución de la consulta. Para obtener más información, vea la sección "Notas" más adelante en este tema.

queue_id

smallint

Id. de la cola de espera en la que esta consulta espera las concesiones de memoria. Es NULL si ya se ha concedido la memoria.

wait_order

int

Orden secuencial de las consultas en espera en el queue_id especificado. Este valor puede cambiar para una determinada consulta si otras consultas obtienen concesiones de memoria o tiempos de espera. Es NULL si ya se ha concedido la memoria.

is_next_candidate

bit

Candidata para la siguiente concesión de memoria.

1 = Sí

0 = No

NULL = Ya se ha concedido la memoria.

wait_time_ms

bigint

Tiempo de espera en milisegundos. Es NULL si ya se ha concedido la memoria.

plan_handle

varbinary(64)

Identificador de este plan de consulta. Use sys.dm_exec_query_plan para extraer el plan XML real.

sql_handle

varbinary(64)

Identificador del texto de Transact-SQL de esta consulta. Use sys.dm_exec_sql_text para obtener el texto de Transact-SQL real.

group_id

int

Id. para el grupo de cargas de trabajo donde se está ejecutando la consulta.

pool_id

int

Id. del grupo de recursos de servidor al que pertenece este grupo de cargas de trabajo.

is_small

tinyint

Cuando se establece en 1, indica que esta concesión utiliza el semáforo de recursos pequeño. Cuando se establece en 0, indica que se utiliza un semáforo normal.

ideal_memory_kb

bigint

Tamaño, en kilobytes (KB), de la concesión de memoria para ajustar todo en la memoria física. Está basado en la estimación de la cardinalidad.

Permisos

Requiere el permiso VIEW SERVER STATE en el servidor.

Comentarios

Un escenario de depuración típico para un tiempo de espera de consulta puede tener el siguiente aspecto:

  • Compruebe el estado de la memoria del sistema global con sys.dm_os_memory_clerks, sys.dm_os_sys_info y diversos contadores de rendimiento.

  • Compruebe las reservas de memoria para la ejecución de consultas en sys.dm_os_memory_clerks, donde type = 'MEMORYCLERK_SQLQERESERVATIONS'.

  • Compruebe las consultas que están en espera de concesiones con sys.dm_exec_query_memory_grants.

  • Examine más las consultas que utilizan mucha memoria con sys.dm_exec_requests.

  • Si sospecha que hay una consulta descontrolada, examine el plan de presentación en sys.dm_exec_query_plan y el texto del lote en sys.dm_exec_sql_text.

Las consultas que utilizan vistas de administración dinámica que incluyen ORDER BY o agregados pueden aumentar el consumo de memoria y, de esta forma, contribuir al problema que están solucionando.

La función del regulador de recursos permite que un administrador de bases de datos distribuya los recursos del servidor entre los grupos de recursos de servidor, hasta un máximo de 20 grupos. En SQL Server 2008, cada grupo se comporta como una pequeña instancia independiente del servidor y requiere 2 semáforos. El número de filas devuelto por sys.dm_exec_query_resource_semaphores puede ser hasta 20 veces mayor que las filas devueltas en SQL Server 2005.