Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
databáze SQL v Microsoft Fabric
Vrací informace o všech dotazech, které požádaly o schválení vzpomínky nebo na něj čekají, nebo jim bylo uděleno. Dotazy, které nevyžadují přidělení paměti, se v tomto zobrazení neobjeví. Například operace třídění a hashování spojů mají paměťové granty pro provádění dotazů, zatímco dotazy bez klauzule ORDER BY nebudou mít paměťové granty.
V Azure SQL Database nemůžou zobrazení dynamické správy zveřejnit informace, které by ovlivnily zahrnutí databáze nebo zpřístupňují informace o jiných databázích, ke kterým má uživatel přístup. Aby se předešlo vystavení těchto informací, je filtrován každý řádek obsahující data, která nepatří připojenému tenantovi. Navíc jsou filtrovány hodnoty ve sloupcích scheduler_id, wait_order, pool_id, group_id ; hodnota sloupce je nastavena na NULL.
Poznámka:
Pokud to chcete volat ze služby Azure Synapse Analytics nebo systému PDW (Analytics Platform System), použijte název sys.dm_pdw_nodes_exec_query_memory_grants. Tato syntaxe není podporována bezserverovým fondem SQL ve službě Azure Synapse Analytics.
| Název sloupce | Datový typ | Description |
|---|---|---|
| session_id | smallint | ID (SPID) relace, ve které tento dotaz běží. |
| request_id | int | ID požadavku. Jedinečné v kontextu relace. |
| scheduler_id | int | ID plánovače, který tento dotaz plánuje. |
| Kameraman | smallint | Stupeň paralelismu tohoto dotazu. |
| request_time | datetime | Datum a čas, kdy tento dotaz požadoval povolení k pamětí. |
| grant_time | datetime | Datum a čas, kdy byla pro tento dotaz udělena paměť. NULL, pokud paměť ještě není udělena. |
| requested_memory_kb | bigint | Celkové požadované množství paměti v kilobajtech. |
| granted_memory_kb | bigint | Celkové množství paměti skutečně udělené v kilobajtech. Může být NULL, pokud paměť ještě není udělena. Pro typickou situaci by tato hodnota měla být stejná jako requested_memory_kb. Pro tvorbu indexů může server povolit další paměť na vyžádání nad rámec původně udělené paměti. |
| required_memory_kb | bigint | Minimální paměť potřebná k provedení tohoto dotazu je v kilobajtech.
requested_memory_kb je stejné nebo větší než tato částka. |
| used_memory_kb | bigint | Fyzická paměť se v tuto chvíli používá v kilobajtech. |
| max_used_memory_kb | bigint | Maximální fyzická paměť použitá do tohoto okamžiku v kilobajtech. |
| query_cost | float | Odhadované náklady na dotazy. |
| timeout_sec | int | Vyprší časový limit během několika sekund, než tento dotaz vydá žádost o povolení k pamětí. |
| resource_semaphore_id | smallint | Neunikátní ID semaforu zdroje, na kterém tento dotaz čeká. Poznámka: Toto ID je unikátní u verzí SQL Serveru, které jsou starší než SQL Server 2008 (10.0.x). Tato změna může ovlivnit řešení řešení problémů při provádění dotazů. Pro více informací viz sekce "Poznámky" později v tomto článku. |
| queue_id | smallint | ID čekací fronty, kde tento dotaz čeká na přidělení paměti. NULL, pokud je paměť již udělena. |
| wait_order | int | Postupné pořadí čekání dotazů v rámci specifikované queue_id. Tato hodnota se může změnit pro daný dotaz, pokud jiné dotazy dostanou povolení nebo časový limit. NULL, pokud už je paměť udělena. |
| is_next_candidate | bit | Kandidát na další paměťový grant. 1 = Ano 0 = Ne NULL = Paměť je již udělena. |
| wait_time_ms | bigint | Čekací doba v milisekundách. NULL, pokud je paměť již udělena. |
| plan_handle | varbinary(64) | Identifikátor tohoto plánu dotazu. Použijte sys.dm_exec_query_plan k extrakci skutečného XML plánu. |
| sql_handle | varbinary(64) | Identifikátor pro Transact-SQL text pro tento dotaz. Použijte sys.dm_exec_sql_text to k získání skutečného Transact-SQL textu. |
| group_id | int | ID pro skupinu zátěží, kde tento dotaz běží. |
| pool_id | int | ID zdrojového fondu, do kterého tato skupina zátěží patří. |
| is_small | tinyint | Když je nastaveno na 1, označuje, že tento grant využívá semafor s malými zdroji. Při nastavení na 0 označuje, že je použit běžný semafor. |
| ideal_memory_kb | bigint | Velikost paměti, v kilobajtech (KB), umožňuje vešt vše do fyzické paměti. To je založeno na odhadu kardinálnosti. |
| pdw_node_id | int | Identifikátor uzlu, na který je tato distribuce zapnutá. Platí na: Azure Synapse Analytics, Analytics Platform System (PDW) |
| reserved_worker_count | bigint | Počet vyhrazených pracovních vláken. Platí na: SQL Server (počínaje SQL Server 2016 (13.x)) a Azure SQL Database |
| used_worker_count | bigint | Počet pracovních vláken použitých v tuto chvíli. Platí na: SQL Server (počínaje SQL Server 2016 (13.x)) a Azure SQL Database |
| max_used_worker_count | bigint | Maximální počet pracovních vláken použitých do tohoto okamžiku. Platí na: SQL Server (počínaje SQL Server 2016 (13.x)) a Azure SQL Database |
| reserved_node_bitmap | bigint | Bitmapa uzlů NUMA, kde jsou vyhrazena pracovní vlákna . Platí na: SQL Server (počínaje SQL Server 2016 (13.x)) a Azure SQL Database |
Povolení
Na SQL Serveru je VIEW SERVER STATE potřeba povolení.
V Azure SQL databázi vyžaduje oprávnění VIEW DATABASE STATE v databázi.
Oprávnění pro SQL Server 2022 a novější
Vyžaduje oprávnění ZOBRAZIT STAV VÝKONU SERVERU na serveru.
Poznámky
Dotazy, které používají dynamické pohledy na správu zahrnující ORDER BY nebo agregované, mohou zvýšit spotřebu paměti a tím přispět k problému, který řeší.
Funkce Resource Govern umožňuje správce databáze rozdělit serverové zdroje mezi zdrojové pooly, až do maxima 64 poolů. Od SQL Server 2008 (10.0.x) se každý pool chová jako malá nezávislá serverová instance a vyžaduje dva semafory. Počet řádků, které se sys.dm_exec_query_resource_semaphores vracejí, může být až 20krát větší než počet řádků vrácených v SQL Server 2005 (9.x).
Examples
Typický ladicí scénář pro vypršení času dotazu může zkoumat následující:
Zkontrolujte celkový stav systémové paměťi pomocí sys.dm_os_memory_clerks, sys.dm_os_sys_info a různých výkonových čítačů.
Zkontrolujte rezervace paměti pro dotazy a vykonání v místě
sys.dm_os_memory_clerks, kdetype = 'MEMORYCLERK_SQLQERESERVATIONS'.Zkontrolujte dotazy čekající1 na granty pomocí
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 V tomto scénáři je typ čekání obvykle RESOURCE_SEMAPHORE. Pro více informací viz sys.dm_os_wait_stats (Transact-SQL).
Vyhledávejte cache pro dotazy s přidělováním pamětí pomocí sys.dm_exec_cached_plans (Transact-SQL) a 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); GOPokud je podezření na nekontrolovaný dotaz, prohledejte Showplan ve sloupci
query_planz sys.dm_exec_query_plan a dotazovací dávkutextz sys.dm_exec_sql_text. Dále prozkoumejte paměťově náročné dotazy, které se právě provádějí, pomocí 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