Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-databas i Microsoft Fabric
Returnerar information om alla frågor som har begärt och väntar på ett minnesbidrag eller har fått ett minnesbidrag. Frågor som inte kräver minnesbidrag kommer inte att visas i denna vy. Till exempel har sorterings- och hash-join-operationer minnesbeviljande för frågeexekvering, medan frågor utan ORDER BY klausul inte har minnesbeviljaning.
I Azure SQL Database kan dynamiska hanteringsvyer inte exponera information som skulle påverka databasens inneslutning eller exponera information om andra databaser som användaren har åtkomst till. För att undvika att exponera denna information filtreras varje rad som innehåller data som inte tillhör den anslutna tenanten bort. Dessutom filtreras värdena i kolumnerna scheduler_id, wait_order, pool_id, ; group_id kolumnvärdet sätts till NULL.
Anmärkning
Om du vill anropa detta från Azure Synapse Analytics eller Analytics Platform System (PDW) använder du namnet sys.dm_pdw_nodes_exec_query_memory_grants. Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics.
| Kolumnnamn | Datatyp | Beskrivning |
|---|---|---|
| session_id | smallint | ID (SPID) för sessionen där denna fråga körs. |
| request_id | int | ID för begäran. Unikt i kontexten för sessionen. |
| scheduler_id | int | ID för schemaläggaren som schemalägger denna fråga. |
| Dop | smallint | Graden av parallellism i denna fråga. |
| request_time | datetime | Datum och tid då denna fråga begärde minnesbeviljningen. |
| grant_time | datetime | Datum och tid då minne beviljades för denna fråga. NULL om minnet ännu inte är beviljat. |
| requested_memory_kb | bigint | Total begärd mängd minne i kilobyte. |
| granted_memory_kb | bigint | Total mängd minne som faktiskt ges i kilobyte. Kan vara NULL om minnet ännu inte är beviljat. För en typisk situation bör detta värde vara detsamma som requested_memory_kb. För indexskapande kan servern tillåta ytterligare minne på begäran utöver det ursprungliga minnet. |
| required_memory_kb | bigint | Minsta minne krävs för att köra denna fråga i kilobyte.
requested_memory_kb är samma eller större än denna summa. |
| used_memory_kb | bigint | Fysiskt minne används just nu i kilobyte. |
| max_used_memory_kb | bigint | Maximalt fysiskt minne som används fram till detta ögonblick i kilobyte. |
| query_cost | float | Uppskattad kostnad för förfrågningar. |
| timeout_sec | int | Timeout sekunder innan denna fråga ger minnesbeviljningsbegäran. |
| resource_semaphore_id | smallint | Icke-unikt ID för resurssemaforen som denna fråga väntar på. Not: Detta ID är unikt i versioner av SQL Server som är äldre än SQL Server 2008 (10.0.x). Denna förändring kan påverka felsökningskörningen av frågor. För mer information, se avsnittet "Anmärkningar" senare i denna artikel. |
| queue_id | smallint | ID för väntekön där denna fråga väntar på minnesbeviljade. NULL om minnet redan är beviljat. |
| wait_order | int | Sekventiell ordning av väntefrågor inom den angivna queue_id. Detta värde kan ändras för en given fråga om andra frågor får minnesbeviljande eller tidsavbruten tid. NULL om minnet redan är beviljat. |
| is_next_candidate | bit | Kandidat för nästa minnesbidrag. 1 = Ja 0 = Nej NULL = Minne är redan beviljat. |
| wait_time_ms | bigint | Väntetid i millisekunder. NULL om minnet redan är beviljat. |
| plan_handle | varbinary(64) | Identifierare för denna frågeplan. Använd sys.dm_exec_query_plan för att extrahera själva XML-planen. |
| sql_handle | varbinary(64) | Identifierare för Transact-SQL text för denna fråga. Fick sys.dm_exec_sql_text den riktiga Transact-SQL texten. |
| group_id | int | ID för arbetsbelastningsgruppen där denna fråga körs. |
| pool_id | int | ID för resurspoolen som denna arbetsbelastningsgrupp tillhör. |
| is_small | tinyint | När den sätts till 1 indikerar detta bidrag att den lilla resurssemaforen används. När den sätts till 0 indikerar den att en reguljär semafor används. |
| ideal_memory_kb | bigint | Storleken, i kilobyte (KB), av minnet ger utrymme för att få plats med allt i det fysiska minnet. Detta baseras på kardinalitetsuppskattningen. |
| pdw_node_id | int | Identifieraren för noden som den här fördelningen är på. gäller för: Azure Synapse Analytics, Analytics Platform System (PDW) |
| reserved_worker_count | bigint | Antal trådar för reserverade arbetare. Gäller för: SQL Server (från och med SQL Server 2016 (13.x)) och Azure SQL Database |
| used_worker_count | bigint | Antal arbetstrådar som används just nu. Gäller för: SQL Server (från och med SQL Server 2016 (13.x)) och Azure SQL Database |
| max_used_worker_count | bigint | Maximalt antal arbetstrådar som används hittills. Gäller för: SQL Server (från och med SQL Server 2016 (13.x)) och Azure SQL Database |
| reserved_node_bitmap | bigint | Bitmap över NUMA-noder där arbetstrådar är reserverade. Gäller för: SQL Server (från och med SQL Server 2016 (13.x)) och Azure SQL Database |
Permissions
På SQL Server krävs VIEW SERVER STATE tillstånd.
På Azure SQL Database krävs behörighet VIEW DATABASE STATE i databasen.
Behörigheter för SQL Server 2022 och senare
Kräver BEHÖRIGHET FÖR VISNINGSSERVERNS PRESTANDATILLSTÅND på servern.
Anmärkningar
Frågor som använder dynamiska hanteringsvyer som inkluderar ORDER BY eller aggregerar kan öka minnesförbrukningen och därmed bidra till det problem de felsöker.
Funktionen Resource Governor gör det möjligt för en databasadministratör att fördela serverresurser mellan resurspooler, upp till maximalt 64 pooler. Från och med SQL Server 2008 (10.0.x) beter sig varje pool som en liten oberoende serverinstans och kräver två semaforer. Antalet rader som returneras från sys.dm_exec_query_resource_semaphores kan vara upp till 20 gånger fler än raderna som returneras i SQL Server 2005 (9.x).
Examples
Ett typiskt felsökningsscenario för frågetimeout kan undersöka följande:
Kontrollera den övergripande statusen för systemminnet med hjälp av sys.dm_os_memory_clerks,sys.dm_os_sys_info och olika prestandaräknare.
Kontrollera om minnesreservationer för frågeexekvering finns där
sys.dm_os_memory_clerkstype = 'MEMORYCLERK_SQLQERESERVATIONS'.Kontrollera om frågor som väntar1 för bidrag med hjälp av:
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 I detta scenario är väntetypen vanligtvis RESOURCE_SEMAPHORE. För mer information, se sys.dm_os_wait_stats (Transact-SQL).
Sök i cachen efter frågor med minnesbeviljande med sys.dm_exec_cached_plans (Transact-SQL) och 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); GOOm en okontrollerad sökning misstänks, undersök Showplanen i kolumnen
query_planfrån sys.dm_exec_query_plan och frågebatchentextfrån sys.dm_exec_sql_text. Undersök dessutom minnesintensiva frågor som för närvarande körs, med hjälp av 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