Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitikai Platform System (PDW)
SQL adatbázis a Microsoft Fabric-ben
Visszaadja az összes olyan lekérdezést, amely memóriatámogatást kért és vár, vagy kapott memóriatámogatást. Azok a lekérdezések, amelyek nem igényelnek memóriatámogatást, nem jelennek meg ebben a nézetben. Például a sort és hash join műveletek memóriát biztosítanak a lekérdezés végrehajtásához, míg a klauzula ORDER BY nélküli lekérdezéseknek nem lesz memória megadása.
Az Azure SQL Database-ben a dinamikus felügyeleti nézetek nem tehetnek közzé olyan információkat, amelyek hatással lennének az adatbázis-elszigetelésre, vagy nem tehetnek közzé információkat más olyan adatbázisokról, amelyekhez a felhasználó hozzáfér. Ennek az információnak a feltárása érdekében minden olyan sor, amely nem a kapcsolódó bérlőhöz tartozó adatokat tartalmaz, kiszűrik. Ezen felül az oszlopok scheduler_idértékei , wait_order, pool_idgroup_id szűrve vannak; az oszlop értéke NULL-ra van állítva.
Megjegyzés:
Ha ezt az Azure Synapse Analytics vagy az Analytics Platform System (PDW) szolgáltatásból szeretné meghívni, használja a nevet sys.dm_pdw_nodes_exec_query_memory_grants. Ezt a szintaxist az Azure Synapse Analytics kiszolgáló nélküli SQL-készlete nem támogatja.
| Oszlop neve | Adattípus | Leírás |
|---|---|---|
| session_id | smallint | Az ülés azonosítója (SPID), ahol ez a lekérdezés fut. |
| request_id | int | A kérés azonosítója. A munkamenet kontextusában egyedi. |
| scheduler_id | int | Az ütemező azonosítója, amely ezt a lekérdezést ütemezi. |
| Dop | smallint | A lekérdezés párhuzamosságának mértéke. |
| request_time | datetime | A keresés időpontja és dátuma, amikor ez a lekérdezés memória támogatást kért. |
| grant_time | datetime | Dátum és időpont, amikor memóriát adtak erre a lekérdezésre. NULL, ha még nem kapta meg a memóriát. |
| requested_memory_kb | bigint | A kért memória teljes mennyisége kilobájtokban. |
| granted_memory_kb | bigint | A tényleges memória teljes mennyisége kilobájtokban. Lehet NULL, ha a memóriát még nem adták meg. Egy tipikus helyzetben ennek az értéknek ugyanaznak kell lennie, mint requested_memory_kb. Az indexkészítéshez a szerver további igény szerinti memóriát engedélyezhet az eredetileg biztosított memórián túl. |
| required_memory_kb | bigint | A lekérdezés futtatásához szükséges minimum memória kilobájtokban.
requested_memory_kb ugyanaz vagy nagyobb, mint ez az összeg. |
| used_memory_kb | bigint | Fizikai memória ebben a pillanatban kilobájtokban használatos. |
| max_used_memory_kb | bigint | A maximális fizikai memória eddig kilobájtokban van felhasználva. |
| query_cost | float | Becsült lekérdezési költség. |
| timeout_sec | int | Másodpercek múlva időkorlát, mielőtt ez a lekérdezés megadja a memória engedélykérést. |
| resource_semaphore_id | smallint | Nem egyedi azonosítója annak az erőforrás-szemafúrnak, amelyre ez a lekérdezés vár. Jegyzet: Ez az azonosító egyedi az SQL Server verzióiban, amelyek korábban állnak az SQL Server 2008-nál (10.0.x). Ez a változás befolyásolhatja a lekérdezés elvégzésének hibakeresését. További információért lásd a cikk későbbi "Megjegyzések" szakaszát. |
| queue_id | smallint | A várakozó sor azonosítója, ahol ez a lekérdezés memória támogatásokra vár. NULL, ha a memória már megadva. |
| wait_order | int | A megvárakozó lekérdezések sorrendje a megadott queue_idkereten belül. Ez az érték változhat egy adott lekérdezés esetén, ha más lekérdezések memória támogatást vagy időkorlátot kapnak. NULL, ha memória már engedélyezett. |
| is_next_candidate | bit | Jelölt a következő memóriatámogatásra. 1 = Igen 0 = Nem NULL = Memória már engedélyezett. |
| wait_time_ms | bigint | Várakozási idő ezredmásodpercekben. NULL, ha a memória már megadva. |
| plan_handle | varbinary(64) | Ennek a lekérdezési tervnek azonosítója. Használd sys.dm_exec_query_plan az XML csomag kihúzására. |
| sql_handle | varbinary(64) | Azonosító Transact-SQL szöveghez ehhez a lekérdezéshez. Használtam sys.dm_exec_sql_text a tényleges Transact-SQL szöveget kaptam. |
| group_id | int | ID annak a munkaterhelési csoportnak, ahol ez a lekérdezés fut. |
| pool_id | int | Az erőforrás-pool azonosítója, amelyhez ez a munkaterhelési csoport tartozik. |
| is_small | tinyint | Ha 1-re állítva állítjuk, az azt jelzi, hogy ez a támogatás a kis erőforrás szemafórt használja. Ha 0-ra állítják, azt jelzi, hogy egy reguláris szemafórt használnak. |
| ideal_memory_kb | bigint | A memória összege, kilobájtokban (KB), amely mindent beilleszt a fizikai memóriába. Ez a kardinalitás-becslés alapján alapul. |
| pdw_node_id | int | Annak a csomópontnak az azonosítója, amelyen ez a disztribúció található. A következővonatkozik: Azure Synapse Analytics, Analytics Platform System (PDW) |
| reserved_worker_count | bigint | A fenntartott munkás szálak száma. Érvényes: SQL Server (SQL Server 2016 (13.x)-től kezdve) és Azure SQL Database |
| used_worker_count | bigint | Jelenleg használt munkafonalok száma. Érvényes: SQL Server (SQL Server 2016 (13.x)-től kezdve) és Azure SQL Database |
| max_used_worker_count | bigint | A lehető legtöbb munkafonal eddig felhasznált. Érvényes: SQL Server (SQL Server 2016 (13.x)-től kezdve) és Azure SQL Database |
| reserved_node_bitmap | bigint | Bitmapet a NUMA csomópontokról, ahol a munkavezető szálak vannak fenntartva. Érvényes: SQL Server (SQL Server 2016 (13.x)-től kezdve) és Azure SQL Database |
Permissions
SQL Serveren engedély szükséges VIEW SERVER STATE .
Azure SQL Database-en az adatbázisban szükséges engedély VIEW DATABASE STATE .
Engedélyek az SQL Server 2022-hez és újabb verziókhoz
A KISZOLGÁLÓ TELJESÍTMÉNYÁLLAPOTÁNAK MEGTEKINTÉSE engedélyre van szükség a kiszolgálón.
Megjegyzések
Azok a lekérdezések, amelyek dinamikus menedzsment nézeteket használnak, amelyek tartalmazzák ORDER BY vagy aggregálnak, növelhetik a memóriafogyasztást, és így hozzájárulhatnak a probléma megoldásához.
A Resource Governor funkció lehetővé teszi az adatbázis-adminisztrátor számára, hogy szerver erőforrásait oszlassa meg az erőforrás-poolok között, legfeljebb 64 pool között. Az SQL Server 2008-tól (10.0.x) kezdve minden pool úgy viselkedik, mint egy kis, független szerver példány, és két szemafórt igényel. A visszaküldött sorok sys.dm_exec_query_resource_semaphores száma akár 20-szor is nagyobb lehet, mint az SQL Server 2005 (9.x) által visszaadott sorok.
Példák
Egy tipikus hibakeresési idő-kilépés esetén a következőket vizsgálhatja:
Ellenőrizze az általános rendszer memória állapotát sys.dm_os_memory_clerks, sys.dm_os_sys_info és különböző teljesítményszámlálókkal is.
Ellenőrizze a lekérdezés-végrehajtási memóriafenntartásokat a helyen
sys.dm_os_memory_clerks, aholtype = 'MEMORYCLERK_SQLQERESERVATIONS'.Nézd meg az1-re váró pályázatokat a következő módon:
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 Ebben a helyzetben a várakozási típus általában RESOURCE_SEMAPHORE. További információért lásd sys.dm_os_wait_stats (Transact-SQL).
Cache-ben keressen memóriatámogatással rendelkező lekérdezéseket sys.dm_exec_cached_plans (Transact-SQL) és sys.dm_exec_query_plan (Transact-SQL) használatával
-- 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); GOHa gyanítják a szökős lekérdezést, nézd meg a Showplan-t az
query_planoszlopban sys.dm_exec_query_plan-ből , és lekérdezési kötetettexta sys.dm_exec_sql_text-ből. Vizsgáljuk meg a jelenleg futó memóriaigényes lekérdezéseket sys.dm_exec_requests használatával.--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