sys.dm_exec_query_memory_grants (Transact-SQL)
Retorna informações sobre as consultas que obtiveram uma concessão de memória ou que ainda precisam da concessão para serem executadas. As consultas que não precisam aguardar uma concessão de memória não aparecerão nessa exibição.
Nome da coluna |
Tipo de dados |
Descrição |
---|---|---|
session_id |
smallint |
ID (SPID) da sessão em que esta consulta está em execução. |
request_id |
int |
ID da solicitação. Exclusiva no contexto da sessão. |
scheduler_id |
int |
ID do agendador que está programando esta consulta. |
dop |
smallint |
Grau de paralelismo desta consulta. |
request_time |
datetime |
Data e hora quando esta consulta solicitou a concessão de memória. |
grant_time |
datetime |
Data e hora quando a memória foi concedida a esta consulta. NULL se memória ainda não tiver sido concedida. |
requested_memory_kb |
bigint |
Quantidade total solicitada de memória em quilobytes. |
granted_memory_kb |
bigint |
Total de memória realmente concedido em quilobytes. Poderá ser NULL se a memória ainda não tiver sido concedida. Em uma situação típica, este valor deveria ser igual a requested_memory_kb. Na criação de índices, o servidor pode permitir memória sob demanda adicional além da memória inicialmente concedida. |
required_memory_kb |
bigint |
Memória mínima exigida para executar esta consulta em quilobytes. requested_memory_kb é maior ou igual a essa quantidade. |
used_memory_kb |
bigint |
Memória física usada neste momento em quilobytes. |
max_used_memory_kb |
bigint |
Máximo de memória física usada até este momento em quilobytes. |
query_cost |
float |
Custo de consulta estimado. |
timeout_sec |
int |
Tempo limite em segundos antes de esta consulta desistir da solicitação de concessão de memória. |
resource_semaphore_id |
smallint |
ID não-exclusivo do sinal do recurso em que esta consulta está aguardando.
Observação
Este ID é exclusivo em versões do SQL Server anteriores ao SQL Server 2008. Essa alteração pode afetar a execução de consulta de solução de problemas. Para obter mais informações, consulte "Comentários", posteriormente neste tópico.
|
queue_id |
smallint |
ID da fila de espera em que esta consulta aguarda concessões de memória. NULL se a memória já tiver sido concedida. |
wait_order |
int |
Ordem seqüencial de consultas de espera dentro da queue_id especificada. Esse valor poderá ser alterado para uma determinada consulta se outras consultas obtiverem concessões de memória ou tempo limite. NULL se a memória já tiver sido concedida. |
is_next_candidate |
bit |
Candidato para a próxima concessão de memória. 1 = Sim 0 = Não NULL = Se a memória já tiver sido concedida. |
wait_time_ms |
bigint |
Tempo de espera em milissegundos. NULL se a memória já tiver sido concedida. |
plan_handle |
varbinary(64) |
Identificador para este plano de consulta. Use sys.dm_exec_query_plan para extrair o plano XML real. |
sql_handle |
varbinary(64) |
Identificador de texto Transact-SQL desta consulta. Use sys.dm_exec_sql_text para obter o texto Transact-SQL real. |
group_id |
int |
ID do grupo de carga de trabalho em que esta consulta está sendo executada. |
pool_id |
int |
ID do pool de recursos a que este grupo de carga de trabalho pertence. |
is_small |
tinyint |
Quando definido como 1, indica que esta concessão usa o sinal do recurso pequeno. Quando definido como 0, indica que um sinal normal é usado. |
ideal_memory_kb |
bigint |
Tamanho, em quilobytes (KB), da concessão de memória para ajustar tudo na memória física. Ele tem como base a estimativa de cardinalidade. |
Permissões
Requer a permissão VIEW SERVER STATE no servidor.
Comentários
Um cenário de depuração típico para tempo limite de consulta pode se parecer com este:
Verifique o status geral da memória do sistema usando sys.dm_os_memory_clerks, sys.dm_os_sys_info e vários contadores de desempenho.
Verifique se há reservas de memória de execução da consulta em sys.dm_os_memory_clerks, em que type = 'MEMORYCLERK_SQLQERESERVATIONS'.
Verifique se há consultas aguardando concessões que usam sys.dm_exec_query_memory_grants.
Além disso, examine as consultas que usam bastante memória utilizando sys.dm_exec_requests.
Se houver suspeita de uma consulta sem controle, examine o Plano de execução de sys.dm_exec_query_plan e o texto em lote de sys.dm_exec_sql_text.
As consultas que usam exibições de gerenciamento dinâmico com ORDER BY ou agregações podem aumentar o uso da memória e, dessa forma, contribuir para a solução do problema.
O recurso Administrador de Recursos permite que um administrador de banco de dados distribua recursos de servidor entre pools de recursos, até um máximo de 20 pools. No SQL Server 2008, cada pool se comporta como uma instância de servidor independente pequena e requer dois sinais. O número de linhas retornadas de sys.dm_exec_query_resource_semaphores pode ser até 20 vezes mais do que o retornado no SQL Server 2005.