sys.dm_exec_query_memory_grants (Transact-SQL)
Retorna informações sobre as consultas que adquiriram uma concessão de memória ou que ainda precisam dessa concessão para serem executadas. As consultas que não requerem uma concessão de memória não aparecerão nessa exibição.
No Banco de dados SQL do Windows Azure, as exibições de gerenciamento dinâmico não podem expor informações que afetarão a contenção do banco de dados ou informações sobre outros bancos de dados aos quais o usuário tem acesso. Para evitar a exposição dessas informações, cada linha que contém os dados que não pertencem ao locatário conectado será filtrada. Além disso, os valores nas colunas scheduler_id, wait_order, pool_id, group_id são filtrados; o valor da coluna é definido como NULL.
Aplica-se a: SQL Server (SQL Server 2008 até a versão atual), Banco de dados SQL do Windows Azure (versão inicial até a versão atual). |
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 semáforo do recurso no qual esta consulta está aguardando. Dica 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 sequencial 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 64 pools. A partir do SQL Server 2008, cada pool se comporta como uma instância de servidor independente pequena e exige dois semáforos. O número de linhas retornadas de sys.dm_exec_query_resource_semaphores pode ser até 20 vezes maior que o retornado no SQL Server 2005.
Consulte também
Referência
sys.dm_exec_query_resource_semaphores (Transact-SQL)
Funções e exibições de gerenciamento dinâmico relacionadas à execução (Transact-SQL)