Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Database w Microsoft Fabric
Zwraca informacje o wszystkich zapytaniach, które złożyły wniosek o przyznanie pamięci lub oczekują na przyznanie lub otrzymały przyznanie pamięci. Zapytania, które nie wymagają przyznania pamięci, nie pojawią się w tym widoku. Na przykład operacje sortowania i hash join mają przyznawanie pamięci do wykonywania zapytań, podczas gdy zapytania bez klauzuli ORDER BY nie mają przydziału pamięci.
W usłudze Azure SQL Database dynamiczne widoki zarządzania nie mogą ujawniać informacji, które mają wpływ na zawieranie bazy danych lub uwidacznianie informacji o innych bazach danych, do których użytkownik ma dostęp. Aby uniknąć ujawniania tych informacji, każdy wiersz zawierający dane nienależące do połączonego tenanta jest filtrowany. Dodatkowo wartości w kolumnach scheduler_id, wait_order, pool_id, group_id są filtrowane; wartość kolumny jest ustawiona na NULL.
Uwaga / Notatka
Aby wywołać to z usługi Azure Synapse Analytics lub Analytics Platform System (PDW), użyj nazwy sys.dm_pdw_nodes_exec_query_memory_grants. Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.
| Nazwa kolumny | Typ danych | Opis |
|---|---|---|
| session_id | smallint | ID (SPID) sesji, w której to zapytanie jest wykonywane. |
| request_id | int | Identyfikator żądania. Unikatowy w kontekście sesji. |
| scheduler_id | int | ID planera, który planuje to zapytanie. |
| Dop | smallint | Stopień równoległości tego zapytania. |
| request_time | datetime | Data i godzina, kiedy to zapytanie wymagało przyznania pamięci. |
| grant_time | datetime | Data i godzina uzyskania pamięci dla tego zapytania. NULL, jeśli pamięć jeszcze nie jest przyznana. |
| requested_memory_kb | bigint | Całkowita żądana ilość pamięci w kilobajtach. |
| granted_memory_kb | bigint | Całkowita ilość pamięci faktycznie przyznawana w kilobajtach. Może być NULL, jeśli pamięć nie została jeszcze przyznana. W typowej sytuacji ta wartość powinna być taka sama jak requested_memory_kb. Do tworzenia indeksów serwer może umożliwić dodatkową pamięć na żądanie poza początkowo przyznaną pamięcią. |
| required_memory_kb | bigint | Minimalna pamięć wymagana do wykonania tego zapytania to kilobajty.
requested_memory_kb jest taka sama lub większa niż ta kwota. |
| used_memory_kb | bigint | Pamięć fizyczna używana w tym momencie w kilobajtach. |
| max_used_memory_kb | bigint | Maksymalna fizyczna pamięć zużyta do tej pory to kilobajty. |
| query_cost | float | Szacowany koszt zapytania. |
| timeout_sec | int | Czas minął w kilka sekund, zanim to zapytanie zgłosiło żądanie przyznania pamięci. |
| resource_semaphore_id | smallint | Nieunikalny identyfikator semaforu zasobu, na którym czeka to zapytanie. Nuta: Ten identyfikator jest unikalny w wersjach SQL Server starszych niż SQL Server 2008 (10.0.x). Ta zmiana może wpłynąć na wykonywanie zapytań w rozwiązywaniu problemów. Więcej informacji można znaleźć w sekcji "Uwagi" później w tym artykule. |
| queue_id | smallint | ID kolejki oczekującej, gdzie to zapytanie czeka na przyznanie pamięci. NULL, jeśli pamięć jest już przyznana. |
| wait_order | int | Kolejność oczekiwanych zapytań w obrębie określonego queue_id. Ta wartość może się zmienić dla danego zapytania, jeśli inne zapytania otrzymają przyznanie pamięci lub limit czasu. NULL, jeśli pamięć jest już nadana. |
| is_next_candidate | bit | Kandydat na kolejny grant pamięciowy. 1 = Tak 0 = Nie NULL = Pamięć już jest przyznana. |
| wait_time_ms | bigint | Czas oczekiwania w milisekundach. NULL, jeśli pamięć jest już przyznana. |
| plan_handle | varbinary(64) | Identyfikator tego planu zapytania. Użyj sys.dm_exec_query_plan do wyodrębnienia faktycznego planu XML. |
| sql_handle | varbinary(64) | Identyfikator Transact-SQL tekstu dla tego zapytania. Używaj, sys.dm_exec_sql_text żeby uzyskać faktyczny Transact-SQL tekst. |
| group_id | int | ID grupy obciążeń, w której to zapytanie jest wykonywane. |
| pool_id | int | ID puli zasobów, do której należy ta grupa obciążeń. |
| is_small | tinyint | Gdy ustawiony na 1, oznacza, że ten grant wykorzystuje semafor małego zasobu. Gdy ustawiono na 0, oznacza to, że używany jest semafor regularny. |
| ideal_memory_kb | bigint | Rozmiar pamięci w kilobajtach (KB) pozwala pomieścić wszystko w pamięci fizycznej. Opiera się to na szacunku mocy. |
| pdw_node_id | int | Identyfikator węzła, w ramach którego znajduje się ta dystrybucja. Dotyczy do: Azure Synapse Analytics, Analytics Platform System (PDW) |
| reserved_worker_count | bigint | Liczba zarezerwowanych wątków roboczych. Dotyczy do: SQL Server (począwszy od SQL Server 2016 (13.x)) oraz Azure SQL Database |
| used_worker_count | bigint | Liczba wątków roboczych używanych w tym momencie. Dotyczy do: SQL Server (począwszy od SQL Server 2016 (13.x)) oraz Azure SQL Database |
| max_used_worker_count | bigint | Maksymalna liczba wątków roboczych użytych do tej pory. Dotyczy do: SQL Server (począwszy od SQL Server 2016 (13.x)) oraz Azure SQL Database |
| reserved_node_bitmap | bigint | Bitmapa węzłów NUMA, gdzie zarezerwowane są wątki robocze . Dotyczy do: SQL Server (począwszy od SQL Server 2016 (13.x)) oraz Azure SQL Database |
Permissions
Na SQL Server wymaga VIEW SERVER STATE to pozwolenia.
W bazie danych Azure SQL wymaga VIEW DATABASE STATE to uprawnień do bazy danych.
Uprawnienia dla programu SQL Server 2022 i nowszych
Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI SERWERA na serwerze.
Uwagi
Zapytania wykorzystujące dynamiczne widoki zarządzania zawierające ORDER BY agregacje mogą zwiększać zużycie pamięci i tym samym przyczyniać się do problemu, który rozwiązują.
Funkcja Resource Governor umożliwia administratorowi bazy danych rozdzielanie zasobów serwera między pule zasobów, maksymalnie do 64 pul. Począwszy od SQL Server 2008 (10.0.x), każda pula zachowuje się jak mała, niezależna instancja serwera i wymaga dwóch semaforów. Liczba wierszy zwracanych może sys.dm_exec_query_resource_semaphores być nawet 20 razy większa niż liczba wierszy zwracanych w SQL Server 2005 (9.x).
Przykłady
Typowy scenariusz debugowania dla czasu zapytania może badać następujące aspekty:
Sprawdź ogólny stan pamięci systemowej za pomocą sys.dm_os_memory_clerks, sys.dm_os_sys_info oraz różnych liczników wydajności.
Sprawdź rezerwacje pamięci wykonywanej przez zapytania w
sys.dm_os_memory_clerksmiejscu, gdzietype = 'MEMORYCLERK_SQLQERESERVATIONS'.Sprawdź zapytania czekające1 na granty, używając:
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 W tym scenariuszu typ oczekiwania to zazwyczaj RESOURCE_SEMAPHORE. Więcej informacji można znaleźć w sys.dm_os_wait_stats (Transact-SQL).
Przeszukuj pamięć podręczną zapytań z przyznawaniami pamięci, używając sys.dm_exec_cached_plans (Transact-SQL) i 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); GOJeśli podejrzewane jest zapytanie o ucieczkę, przejrzyj Showplan w kolumnie
query_planz sys.dm_exec_query_plan oraz batchtextzapytań z sys.dm_exec_sql_text. Analizuj dalej zapytania wymagające dużo pamięci, które są obecnie wykonywane, używając 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
Zobacz także
- sys.dm_exec_query_resource_semaphores (Transact-SQL)
- sys.dm_os_wait_stats (Transact-SQL)
- Dynamiczne widoki zarządzania i funkcje związane z wykonywaniem (Transact-SQL)
- Przewodnik po architekturze wątków i zadań
- MSSQLSERVER_701
- Rozwiązywanie problemów z błędami braku pamięci za pomocą bazy danych Azure SQL Database