Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:Banco de Dados SQL do
do Azure
Instância Gerenciada SQL do Azure
do Azure Synapse Analytics
do Analytics Platform System (PDW)
Banco de Dados SQL no Microsoft Fabric
Devolve informações sobre todas as consultas que solicitaram e estão à espera de uma concessão de memória ou que receberam uma concessão de memória. Consultas que não requerem uma concessão de memória não aparecerão nesta visão. Por exemplo, as operações de ordenação e de junção por hash têm concessões de memória para execução de consultas, enquanto consultas sem cláusula ORDER BY não terão concessão de memória.
No Banco de Dados SQL do Azure, as exibições de gerenciamento dinâmico não podem expor informações que possam afetar a contenção do banco de dados ou expor informações sobre outros bancos de dados aos quais o usuário tem acesso. Para evitar expor esta informação, todas as linhas que contenham dados que não pertencem ao inquilino ligado são filtradas. 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.
Observação
Para chamar isso do Azure Synapse Analytics ou do Analytics Platform System (PDW), use o nome sys.dm_pdw_nodes_exec_query_memory_grants. Essa sintaxe não é suportada pelo pool SQL sem servidor no Azure Synapse Analytics.
| Nome da coluna | Tipo de dados | Descrição |
|---|---|---|
| session_id | smallint | ID (SPID) da sessão onde esta consulta está a ser executada. |
| request_id | int | ID do pedido. Único no contexto da sessão. |
| scheduler_id | int | ID do agendador que está a agendar esta consulta. |
| dop | smallint | Grau de paralelismo desta consulta. |
| request_time | datetime | Data e hora em que esta consulta solicitou a concessão de memória. |
| grant_time | datetime | Data e hora em que a memória foi concedida para esta consulta. NULL se a memória ainda não for concedida. |
| requested_memory_kb | bigint | Quantidade total de memória solicitada em kilobytes. |
| granted_memory_kb | bigint | Quantidade total de memória realmente concedida em kilobytes. Pode ser NULL se a memória ainda não for concedida. Para uma situação típica, este valor deve ser o mesmo que requested_memory_kb. Para a criação de índices, o servidor pode permitir memória adicional on-demand para além da memória inicialmente concedida. |
| required_memory_kb | bigint | Memória mínima necessária para executar esta consulta em kilobytes.
requested_memory_kb é igual ou maior do que este valor. |
| used_memory_kb | bigint | Memória física usada neste momento em kilobytes. |
| max_used_memory_kb | bigint | A memória física máxima usada até este momento em kilobytes. |
| query_cost | float | Custo estimado da consulta. |
| timeout_sec | int | Tempo de espera em segundos antes desta consulta entregar o pedido de concessão de memória. |
| resource_semaphore_id | smallint | ID não único do semáforo de recurso em que esta consulta está à espera. Nota: Este ID é único em versões do SQL Server anteriores ao SQL Server 2008 (10.0.x). Esta alteração pode afetar a resolução de problemas na execução da consulta. Para mais informações, consulte a secção "Observações" mais adiante neste artigo. |
| queue_id | smallint | ID da fila de espera onde esta consulta espera por concessões de memória. NULL se a memória já for concedida. |
| wait_order | int | Ordem sequencial das consultas em espera dentro do especificado queue_id. Este valor pode mudar para uma dada consulta se outras consultas receberem concessões de memória ou timeout. NULL se a memória já for concedida. |
| is_next_candidate | bit | Candidato à próxima bolsa de memória. 1 = Sim 0 = Não NULL = A memória já é concedida. |
| wait_time_ms | bigint | Tempo de espera em milissegundos. NULL se a memória já for 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 para Transact-SQL texto desta consulta. Usa sys.dm_exec_sql_text para receber a mensagem Transact-SQL real. |
| group_id | int | ID para o grupo de carga de trabalho onde esta consulta está a correr. |
| pool_id | int | ID do pool de recursos a que este grupo de carga de trabalho pertence. |
| is_small | tinyint | Quando definido para 1, indica que esta concessão utiliza o pequeno recurso semáforo. Quando definido para 0, indica que é usado um semáforo regular. |
| ideal_memory_kb | bigint | O tamanho, em kilobytes (KB), da memória permite caber tudo na memória física. Isto baseia-se na estimativa de cardinalidade. |
| pdw_node_id | int | O identificador do nó em que esta distribuição se encontra. Aplica-se a: Azure Synapse Analytics, Analytics Platform System (PDW) |
| reserved_worker_count | bigint | Número de threads de trabalhadores reservados. Aplica-se a: SQL Server (a partir do SQL Server 2016 (13.x)) e Azure SQL Database |
| used_worker_count | bigint | Número de fios de trabalho usados neste momento. Aplica-se a: SQL Server (a partir do SQL Server 2016 (13.x)) e Azure SQL Database |
| max_used_worker_count | bigint | Número máximo de fios de trabalhadores usados até este momento. Aplica-se a: SQL Server (a partir do SQL Server 2016 (13.x)) e Azure SQL Database |
| reserved_node_bitmap | bigint | Bitmap dos nós NUMA onde os worker threads são reservados. Aplica-se a: SQL Server (a partir do SQL Server 2016 (13.x)) e Azure SQL Database |
Permissions
No SQL Server, requer VIEW SERVER STATE permissão.
No Azure SQL Database, requer a VIEW DATABASE STATE permissão na base de dados.
Permissões para SQL Server 2022 e posterior
Requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.
Observações
Consultas que utilizam vistas de gestão dinâmica que incluem ORDER BY ou agregam podem aumentar o consumo de memória e, assim, contribuir para o problema que estão a resolver.
A funcionalidade Resource Governor permite a um administrador de base de dados distribuir recursos do servidor entre pools de recursos, até um máximo de 64 pools. A partir do SQL Server 2008 (10.0.x), cada pool comporta-se como uma pequena instância independente de servidor e requer dois semáforos. O número de linhas que sys.dm_exec_query_resource_semaphores são devolvidas pode ser até 20 vezes superior às linhas devolvidas no SQL Server 2005 (9.x).
Examples
Um cenário típico de depuração para o tempo de espera da consulta pode investigar o seguinte:
Verifique o estado geral da memória do sistema usando sys.dm_os_memory_clerks, sys.dm_os_sys_info e vários contadores de desempenho.
Verifique reservas de memória de execução de consulta em
sys.dm_os_memory_clerksondetype = 'MEMORYCLERK_SQLQERESERVATIONS'.Verifique se há consultas à esperade 1 para bolsas usando
sys.dm_exec_query_memory_grants:--Find all queries waiting in the memory queue SELECT * FROM sys.dm_exec_query_memory_grants WHERE grant_time IS NULL;1 Neste cenário, o tipo de espera é tipicamente RESOURCE_SEMAPHORE. Para mais informações, veja sys.dm_os_wait_stats (Transact-SQL).
Pesquisa na cache de consultas com concessões de memória usando sys.dm_exec_cached_plans (Transact-SQL) e sys.dm_exec_query_plan (Transact-SQL)
-- retrieve every query plan from the plan cache USE master; GO SELECT * FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle); GOSe houver suspeita de uma consulta descontrolada, examine o Plano de Apresentação na
query_plancoluna de sys.dm_exec_query_plan e o lotetextde consultas de sys.dm_exec_sql_text. Analise ainda as consultas intensivas em memória atualmente em execução, utilizando sys.dm_exec_requests.--Active requests with memory grants SELECT --Session data s.[session_id], s.open_transaction_count --Memory usage , r.granted_query_memory, mg.grant_time, mg.requested_memory_kb, mg.granted_memory_kb, mg.required_memory_kb, mg.used_memory_kb, mg.max_used_memory_kb --Query , query_text = t.text, input_buffer = ib.event_info, query_plan_xml = qp.query_plan, request_row_count = r.row_count, session_row_count = s.row_count --Session history and status , s.last_request_start_time, s.last_request_end_time, s.reads, s.writes, s.logical_reads, session_status = s.[status], request_status = r.status --Session connection information , s.host_name, s.program_name, s.login_name, s.client_interface_name, s.is_user_process FROM sys.dm_exec_sessions s LEFT OUTER JOIN sys.dm_exec_requests AS r ON r.[session_id] = s.[session_id] LEFT OUTER JOIN sys.dm_exec_query_memory_grants AS mg ON mg.[session_id] = s.[session_id] OUTER APPLY sys.dm_exec_sql_text (r.[sql_handle]) AS t OUTER APPLY sys.dm_exec_input_buffer(s.[session_id], NULL) AS ib OUTER APPLY sys.dm_exec_query_plan (r.[plan_handle]) AS qp WHERE mg.granted_memory_kb > 0 ORDER BY mg.granted_memory_kb desc, mg.requested_memory_kb desc; GO
Consulte também
- sys.dm_exec_query_resource_semaphores (Transact-SQL)
- sys.dm_os_wait_stats (Transact-SQL)
- Visualizações e funções de gerenciamento dinâmico relacionadas à execução (Transact-SQL)
- Guia de Arquitetura de Threads e Tarefas
- MSSQLSERVER_701
- Resolver problemas relacionados com erros de falta de memória com a Base de Dados SQL do Azure