Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform Systeem (PDW)
SQL-database in Microsoft Fabric
Geeft informatie terug over alle zoekopdrachten die een geheugenbeurs hebben aangevraagd en wachten op deze of die een geheugentoekenning hebben ontvangen. Queries die geen geheugentoekenning vereisen, zullen in deze weergave niet verschijnen. Bijvoorbeeld, sorteer- en hash-join-operaties hebben geheugentoekenningen voor query-uitvoering, terwijl queries zonder clausule ORDER BY geen geheugentoekenning krijgen.
In Azure SQL Database kunnen dynamische beheerweergaven geen informatie weergeven die van invloed is op databaseinsluiting of informatie weergeven over andere databases waartoe de gebruiker toegang heeft. Om te voorkomen dat deze informatie wordt blootgesteld, wordt elke rij die data bevat die niet bij de verbonden tenant hoort, eruit gefilterd. Daarnaast worden de waarden in de kolommen scheduler_id, wait_order, pool_id, group_id gefilterd; de kolomwaarde wordt ingesteld op NULL.
Opmerking
Gebruik de naam sys.dm_pdw_nodes_exec_query_memory_grantsom dit aan te roepen vanuit Azure Synapse Analytics of Analytics Platform System (PDW). Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.
| Kolomnaam | Gegevenstype | Beschrijving |
|---|---|---|
| session_id | smallint | ID (SPID) van de sessie waarin deze query draait. |
| request_id | int | Id van de aanvraag. Uniek in de context van de sessie. |
| scheduler_id | int | ID van de planner die deze query plant. |
| Dop | smallint | Mate van parallelisme van deze vraag. |
| request_time | datetime | Datum en tijd waarop deze query de geheugentoekenning aanvroeg. |
| grant_time | datetime | Datum en tijd waarop geheugen voor deze vraag werd toegekend. NULL als geheugen nog niet is toegekend. |
| requested_memory_kb | bigint | Totale gevraagde hoeveelheid geheugen in kilobytes. |
| granted_memory_kb | bigint | Totale hoeveelheid geheugen die daadwerkelijk in kilobyte wordt toegekend. Kan NULL zijn als het geheugen nog niet is toegekend. Voor een typische situatie zou deze waarde hetzelfde moeten zijn als requested_memory_kb. Voor indexcreatie kan de server extra on-demand geheugen toestaan bovenop het aanvankelijk toegekende geheugen. |
| required_memory_kb | bigint | Minimaal geheugen nodig om deze query in kilobytes uit te voeren.
requested_memory_kb gelijk of groter dan dit bedrag. |
| used_memory_kb | bigint | Fysiek geheugen dat op dit moment in kilobytes wordt gebruikt. |
| max_used_memory_kb | bigint | Maximaal fysiek geheugen tot nu toe in kilobytes. |
| query_cost | float | Geschatte querykosten. |
| timeout_sec | int | Time-out binnen enkele seconden voordat deze query het verzoek om geheugentoestemming opgeeft. |
| resource_semaphore_id | smallint | Niet-unieke ID van de resourcesemafoor waarop deze query wacht. Notitie: Deze ID is uniek in versies van SQL Server die ouder zijn dan SQL Server 2008 (10.0.x). Deze wijziging kan de uitvoering van probleemoplossing beïnvloeden. Voor meer informatie, zie de sectie "Opmerkingen" later in dit artikel. |
| queue_id | smallint | ID van de wachtrij waar deze query wacht op geheugenverleeningen. NULL als het geheugen al is toegekend. |
| wait_order | int | Sequentiële volgorde van wachtopdrachten binnen de gespecificeerde queue_id. Deze waarde kan veranderen voor een bepaalde query als andere zoekopdrachten geheugenbeurzen of time-out krijgen. NULL als geheugen al is toegekend. |
| is_next_candidate | bit | Kandidaat voor de volgende geheugenbeurs. 1 = Ja 0 = Nee NULL = Geheugen is al toegekend. |
| wait_time_ms | bigint | Wachttijd in milliseconden. NULL als het geheugen al is toegekend. |
| plan_handle | varbinary(64) | Identificatie voor dit queryplan. Gebruik sys.dm_exec_query_plan om het daadwerkelijke XML-plan te extraheren. |
| sql_handle | varbinary(64) | Identifier voor Transact-SQL tekst voor deze zoekopdracht. Vroeger sys.dm_exec_sql_text kreeg je de echte Transact-SQL sms. |
| group_id | int | ID voor de werklastgroep waar deze query draait. |
| pool_id | int | ID van de resource pool waartoe deze workloadgroep behoort. |
| is_small | tinyint | Wanneer ingesteld op 1, geeft dit aan dat deze toekenning de kleine resource semaphore gebruikt. Wanneer ingesteld op 0, geeft dit aan dat een reguliere semafoor wordt gebruikt. |
| ideal_memory_kb | bigint | De grootte, in kilobytes (KB), van het geheugen geeft om alles in fysiek geheugen te passen. Dit is gebaseerd op de kardinaliteitsschatting. |
| pdw_node_id | int | De id voor het knooppunt waarop deze distributie zich bevindt. van toepassing op: Azure Synapse Analytics, Analytics Platform System (PDW) |
| reserved_worker_count | bigint | Aantal gereserveerde worker-threads. Van toepassing op: SQL Server (beginnend met SQL Server 2016 (13.x)) en Azure SQL Database |
| used_worker_count | bigint | Aantal werkdraden dat op dit moment wordt gebruikt. Van toepassing op: SQL Server (beginnend met SQL Server 2016 (13.x)) en Azure SQL Database |
| max_used_worker_count | bigint | Maximaal aantal werkdraden tot nu toe gebruikt. Van toepassing op: SQL Server (beginnend met SQL Server 2016 (13.x)) en Azure SQL Database |
| reserved_node_bitmap | bigint | Bitmap van NUMA-knooppunten waar workerthreads zijn gereserveerd. Van toepassing op: SQL Server (beginnend met SQL Server 2016 (13.x)) en Azure SQL Database |
Permissions
Op SQL Server is toestemming vereist VIEW SERVER STATE .
In Azure SQL Database is de VIEW DATABASE STATE toestemming in de database vereist.
Machtigingen voor SQL Server 2022 en hoger
Vereist de machtiging PRESTATIESTATUS VAN DE WEERGAVESERVER op de server.
Opmerkingen
Queries die dynamische beheerweergaven gebruiken die bevatten of aggregaties bevatten ORDER BY , kunnen het geheugenverbruik verhogen en zo bijdragen aan het probleem dat ze aan het oplossen zijn.
De functie Resource Governor stelt een databasebeheerder in staat om serverbronnen te verdelen over resource pools, tot maximaal 64 pools. Vanaf SQL Server 2008 (10.0.x) gedraagt elke pool zich als een kleine, onafhankelijke serverinstantie en vereist twee semaforen. Het aantal rijen dat wordt teruggegeven kan sys.dm_exec_query_resource_semaphores tot 20 keer hoger zijn dan de rijen die worden teruggegeven in SQL Server 2005 (9.x).
Voorbeelden
Een typisch debuggingscenario voor query-time-out kan het volgende onderzoeken:
Controleer de algemene status van het systeemgeheugen met behulp van sys.dm_os_memory_clerks, sys.dm_os_sys_info en diverse prestatietellers.
Controleer op geheugenreserveringen voor query-uitvoering in
sys.dm_os_memory_clerkswaartype = 'MEMORYCLERK_SQLQERESERVATIONS'.Controleer op aanvragen die1 wachten voor subsidies met
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 In dit scenario is het wachttype doorgaans RESOURCE_SEMAPHORE. Voor meer informatie, zie sys.dm_os_wait_stats (Transact-SQL).
Zoek in de cache naar zoekopdrachten met geheugentoekenningen met sys.dm_exec_cached_plans (Transact-SQL) ensys.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); GOAls er een ongecontroleerde query wordt vermoed, bekijk dan de Showplan in de
query_plankolom van sys.dm_exec_query_plan en de querybatchtextvan sys.dm_exec_sql_text. Onderzoek vervolgens geheugenintensieve zoekopdrachten die momenteel worden uitgevoerd, met behulp van 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