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)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Zwraca informacje o każdym żądaniu wykonywanym w programie SQL Server. Aby uzyskać więcej informacji na temat żądań, zobacz Przewodnik dotyczący architektury wątków i zadań.
Uwaga
Aby wywołać tę funkcję z dedykowanej puli SQL w usłudze Azure Synapse Analytics lub Analytics Platform System (PDW), zobacz sys.dm_pdw_exec_requests. W przypadku bezserwerowej puli SQL lub usługi Microsoft Fabric użyj polecenia sys.dm_exec_requests.
| Nazwa kolumny | Typ danych | Opis |
|---|---|---|
session_id |
smallint | Identyfikator sesji, z którą jest związane to żądanie. Nie może być null. |
request_id |
int | Identyfikator żądania. Unikatowy w kontekście sesji. Nie może być null. |
start_time |
data/godzina | Sygnatura czasowa po odebraniu żądania. Nie może być null. |
status |
nvarchar(30) | Stan żądania. Może być jedną z następujących wartości: tło wycofanie uruchomiono wykonywalny uśpienie zawieszony Nie może być null. |
command |
nvarchar(32) | Określa bieżący typ przetwarzanego polecenia. Typowe typy poleceń obejmują następujące wartości: SELECT INSERT AKTUALIZACJA USUŃ DZIENNIK KOPII ZAPASOWYCH KOPIA ZAPASOWA BAZA DANYCH DBCC DLA Tekst żądania można pobrać przy użyciu sys.dm_exec_sql_text elementu z odpowiadającym sql_handle im żądaniem. Procesy systemu wewnętrznego ustawiają polecenie na podstawie typu wykonywanego zadania. Zadania mogą zawierać następujące wartości:MONITOR BLOKADY CHECKPOINTLAZY PISARZ Nie może być null. |
sql_handle |
|
Token, który jednoznacznie identyfikuje partię lub procedurę składowaną, której częścią jest zapytanie. Zmienna mogąca przyjmować wartość null. |
statement_start_offset |
int | Wskazuje, że w bajtach, począwszy od 0, pozycja początkowa aktualnie wykonywanej instrukcji dla aktualnie wykonywanego obiektu wsadowego lub utrwalonego. Można używać razem z sql_handlefunkcją , statement_end_offseti funkcją sys.dm_exec_sql_text dynamicznego zarządzania w celu pobrania aktualnie wykonywanej instrukcji dla żądania. Zmienna mogąca przyjmować wartość null. |
statement_end_offset |
int | Wskazuje, że w bajtach, począwszy od 0, końcowa pozycja aktualnie wykonywanej instrukcji dla aktualnie wykonywanego obiektu wsadowego lub utrwalonego. Można używać razem z sql_handlefunkcją , statement_start_offseti funkcją sys.dm_exec_sql_text dynamicznego zarządzania w celu pobrania aktualnie wykonywanej instrukcji dla żądania. Zmienna mogąca przyjmować wartość null. |
plan_handle |
|
Token, który jednoznacznie identyfikuje plan wykonywania zapytania dla aktualnie wykonywanej partii. Zmienna mogąca przyjmować wartość null. |
database_id |
smallint | Identyfikator bazy danych, względem którego jest wykonywane żądanie. Nie może być null. W usłudze Azure SQL Database wartości są unikatowe w ramach pojedynczej bazy danych lub elastycznej puli, ale nie w obrębie serwera logicznego. |
user_id |
int | Identyfikator użytkownika, który przesłał żądanie. Nie może być null. |
connection_id |
unikalnyidentyfikator | Identyfikator połączenia, na którym dotarło żądanie. Zmienna mogąca przyjmować wartość null. |
blocking_session_id |
smallint | Identyfikator sesji, która blokuje żądanie. Jeśli ta kolumna ma NULL wartość lub 0, żądanie nie jest zablokowane lub informacje o sesji sesji blokującej nie są dostępne (lub nie można ich zidentyfikować). Aby uzyskać więcej informacji, zobacz Omówienie i rozwiązywanie problemów z blokowaniem programu SQL Server.-2 = Zasób blokujący jest własnością oddzielonej transakcji rozproszonej. -3 = Zasób blokujący jest własnością transakcji odroczonego odzyskiwania. -4 = session_id nie można określić właściciela zatrzaśnięć blokującego w tej chwili z powodu przejść stanu zatrzaśnięć wewnętrznych.-5
=
session_id nie można określić właściciela zatrzaśnięć blokującego, ponieważ nie jest on śledzony dla tego typu zatrzaśnięć (na przykład dla zatrzaśnięć SH).Sama w sobie blocking_session_id-5 nie wskazuje problemu z wydajnością.
-5 wskazuje, że sesja oczekuje na zakończenie akcji asynchronicznej. Przed -5 wprowadzeniem ta sama sesja wykazałaby blocking_session_id0wartość , mimo że nadal była w stanie oczekiwania.W zależności od obciążenia obserwowanie blocking_session_id = -5 może być typowym wystąpieniem. |
wait_type |
nvarchar(60) | Jeśli żądanie jest obecnie zablokowane, ta kolumna zwraca typ oczekiwania. Zmienna mogąca przyjmować wartość null. Gdy żądanie używa wielu zadań, na przykład ze względu na równoległość wewnątrz zapytania, zadania mogą czekać na różne zasoby z różnymi typami oczekiwania. Zadanie można zablokować, podczas gdy inne zadania tego samego żądania kontynuują wykonywanie. Aby znaleźć typ oczekiwania i czas trwania dla każdego zadania i tego, czy jest on zablokowany, użyj sys.dm_os_waiting_tasks. Aby uzyskać informacje o typach oczekiwania, zobacz sys.dm_os_wait_stats. |
wait_time |
int | Jeśli żądanie jest obecnie zablokowane, ta kolumna zwraca czas trwania w milisekundach bieżącego oczekiwania. Nie może być null. |
last_wait_type |
nvarchar(60) | Jeśli to żądanie zostało wcześniej zablokowane, ta kolumna zwraca typ ostatniego oczekiwania. Nie może być null. |
wait_resource |
nvarchar(256) | Jeśli żądanie jest obecnie zablokowane, ta kolumna zwraca zasób, dla którego żądanie oczekuje obecnie. Nie może być null. |
open_transaction_count |
int | Liczba otwartych transakcji dla tego żądania. Nie może być null. |
open_resultset_count |
int | Liczba otwartych zestawów wyników dla tego żądania. Nie może być null. |
transaction_id |
bigint | Identyfikator transakcji, w której jest wykonywane to żądanie. Nie może być null. |
context_info |
|
CONTEXT_INFO wartość sesji. Zmienna mogąca przyjmować wartość null. |
percent_complete |
rzeczywiste | Procent wykonanej pracy dla następujących poleceń:ALTER INDEX REORGANIZEAUTO_SHRINK opcja z ALTER DATABASEBACKUP DATABASEDBCC CHECKDBDBCC CHECKFILEGROUPDBCC CHECKTABLEDBCC INDEXDEFRAGDBCC SHRINKDATABASEDBCC SHRINKFILERECOVERYRESTORE DATABASEROLLBACKTDE ENCRYPTIONNie może być null. |
estimated_completion_time |
bigint | Tylko wewnętrzne. Nie może być null. |
cpu_time |
int | Czas procesora CPU w milisekundach używany przez żądanie. Nie może być null. |
total_elapsed_time |
int | Łączny czas upłynął w milisekundach od momentu przybycia żądania. Nie może być null. |
scheduler_id |
int | Identyfikator harmonogramu, który planuje to żądanie. Zmienna mogąca przyjmować wartość null. |
task_address |
varbinary(8) | Adres pamięci przydzielony do zadania skojarzonego z tym żądaniem. Zmienna mogąca przyjmować wartość null. |
reads |
bigint | Liczba odczytów wykonywanych przez to żądanie. Nie może być null. |
writes |
bigint | Liczba zapisów wykonanych przez to żądanie. Nie może być null. |
logical_reads |
bigint | Liczba odczytów logicznych, które zostały wykonane przez żądanie. Nie może być null. |
text_size |
int | Ustawienie TEXTSIZE dla tego żądania. Nie może być null. |
language |
nvarchar(128) | Ustawienie języka dla żądania. Zmienna mogąca przyjmować wartość null. |
date_format |
nvarchar(3) | Ustawienie DATEFORMAT dla żądania. Zmienna mogąca przyjmować wartość null. |
date_first |
smallint | Ustawienie DATEFIRST dla żądania. Nie może być null. |
quoted_identifier |
bit | 1 = QUOTED_IDENTIFIER jest włączona dla żądania. W przeciwnym razie wartość to 0. Nie może być null. |
arithabort |
bit | 1 = ustawienie ARITHABORT jest włączone dla żądania. W przeciwnym razie wartość to 0. Nie może być null. |
ansi_null_dflt_on |
bit | 1 = ustawienie ANSI_NULL_DFLT_ON jest włączone dla żądania. W przeciwnym razie wartość to 0. Nie może być null. |
ansi_defaults |
bit | 1 = ustawienie ANSI_DEFAULTS jest włączone dla żądania. W przeciwnym razie wartość to 0. Nie może być null. |
ansi_warnings |
bit | 1 = ustawienie ANSI_WARNINGS jest włączone dla żądania. W przeciwnym razie wartość to 0. Nie może być null. |
ansi_padding |
bit | 1 = ustawienie ANSI_PADDING jest włączone dla żądania. W przeciwnym razie wartość to 0. Nie może być null. |
ansi_nulls |
bit | 1 = ustawienie ANSI_NULLS jest włączone dla żądania. W przeciwnym razie wartość to 0. Nie może być null. |
concat_null_yields_null |
bit | 1 = ustawienie CONCAT_NULL_YIELDS_NULL jest włączone dla żądania. W przeciwnym razie wartość to 0. Nie może być null. |
transaction_isolation_level |
smallint | Poziom izolacji, z którym jest tworzona transakcja dla tego żądania. Nie może być null. 0 = nieokreślony 1 = ReadUncommitted 2 = ReadCommitted 3 = powtarzalne 4 = Serializowalne 5 = Migawka |
lock_timeout |
int | Zablokuj limit czasu w milisekundach dla tego żądania. Nie może być null. |
deadlock_priority |
int | DEADLOCK_PRIORITY ustawienie dla żądania. Nie może być null. |
row_count |
bigint | Liczba wierszy zwróconych klientowi przez to żądanie. Nie może być null. |
prev_error |
int | Ostatni błąd, który wystąpił podczas wykonywania żądania. Nie może być null. |
nest_level |
int | Bieżący poziom zagnieżdżania kodu wykonywanego w żądaniu. Nie może być null. |
granted_query_memory |
int | Liczba stron przydzielonych do wykonania zapytania w żądaniu. Nie może być null. |
executing_managed_code |
bit | Wskazuje, czy określone żądanie aktualnie wykonuje obiekty środowiska uruchomieniowego języka wspólnego, takie jak procedury, typy i wyzwalacze. Jest on ustawiany dla pełnego czasu, w którym obiekt środowiska uruchomieniowego języka wspólnego znajduje się na stosie, nawet podczas uruchamiania Transact-SQL z poziomu środowiska uruchomieniowego języka wspólnego. Nie może być null. |
group_id |
int | Identyfikator grupy obciążeń, do której należy to zapytanie. Nie może być null. |
query_hash |
binary(8) | Wartość skrótu binarnego obliczana dla zapytania i używana do identyfikowania zapytań z podobną logiką. Możesz użyć skrótu zapytania, aby określić zagregowane użycie zasobów dla zapytań, które różnią się tylko wartościami literału. |
query_plan_hash |
binary(8) | Wartość skrótu binarnego obliczona na planie wykonywania zapytania i używana do identyfikowania podobnych planów wykonywania zapytań. Możesz użyć skrótu planu zapytania, aby znaleźć skumulowany koszt zapytań z podobnymi planami wykonywania. |
statement_sql_handle |
|
Dotyczy: SQL Server 2014 (12.x) i nowszych.sql_handle pojedynczego zapytania.Ta kolumna jest NULL taka, jeśli magazyn zapytań nie jest włączony dla bazy danych. |
statement_context_id |
bigint |
Dotyczy: SQL Server 2014 (12.x) i nowszych. Opcjonalny klucz obcy na sys.query_context_settings.Ta kolumna jest NULL taka, jeśli magazyn zapytań nie jest włączony dla bazy danych. |
dop |
int |
Dotyczy: SQL Server 2016 (13.x) i nowszych. Stopień równoległości zapytania. |
parallel_worker_count |
int |
Dotyczy: SQL Server 2016 (13.x) i nowszych. Liczba zarezerwowanych równoległych procesów roboczych, jeśli jest to zapytanie równoległe. |
external_script_request_id |
unikalnyidentyfikator |
Dotyczy: SQL Server 2016 (13.x) i nowszych. Identyfikator żądania skryptu zewnętrznego skojarzony z bieżącym żądaniem. |
is_resumable |
bit |
Dotyczy: SQL Server 2017 (14.x) i nowszych. Wskazuje, czy żądanie jest operacją indeksu możliwego do wznowienia. |
page_resource |
binary(8) |
Dotyczy: SQL Server 2019 (15.x) Szesnastkowa reprezentacja zasobu strony szesnastkowa 8-bajtowa, jeśli kolumna wait_resource zawiera stronę. Aby uzyskać więcej informacji, zobacz sys.fn_PageResCracker. |
page_server_reads |
bigint |
Dotyczy: Hiperskala usługi Azure SQL Database Liczba odczytów serwera stron wykonywanych przez to żądanie. Nie może być null. |
dist_statement_id |
unikalnyidentyfikator |
Dotyczy: SQL Server 2022 i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics (tylko pule bezserwerowe) i Microsoft Fabric Unikatowy identyfikator instrukcji przesłanej żądania. Nie może być null. |
Uwagi
Aby wykonać kod poza programem SQL Server (na przykład rozszerzonymi procedurami składowanymi i zapytaniami rozproszonymi), wątek musi być wykonywany poza kontrolą harmonogramu niewłaściwego. W tym celu proces roboczy przełącza się w tryb wyprzedzania. Wartości czasu zwracane przez ten dynamiczny widok zarządzania nie obejmują czasu spędzonego w trybie wyprzedzania.
Podczas wykonywania równoległych żądań w trybie wiersza program SQL Server przypisuje wątek procesu roboczego do koordynowania wątków roboczych odpowiedzialnych za wykonywanie przydzielonych zadań. W tym dynamicznym widoku zarządzania tylko wątek koordynatora jest widoczny dla żądania. Kolumny reads, writes, logical_readsi row_count nie są aktualizowane dla wątku koordynatora. Kolumny wait_type, , wait_timelast_wait_type, wait_resourcei granted_query_memory są aktualizowane tylko dla wątku koordynatora. Aby uzyskać więcej informacji, zobacz przewodnik dotyczący architektury wątków i zadań .
Kolumna wait_resource zawiera podobne informacje do resource_description w sys.dm_tran_locks , ale jest formatowana inaczej.
Uprawnienia
Jeśli użytkownik ma VIEW SERVER STATE uprawnienia na serwerze, użytkownik widzi wszystkie wykonywane sesje w wystąpieniu programu SQL Server. W przeciwnym razie użytkownik widzi tylko bieżącą sesję.
VIEW SERVER STATE Nie można udzielić w usłudze Azure SQL Database, więc sys.dm_exec_requests zawsze jest ograniczona do bieżącego połączenia.
W scenariuszach grupy dostępności, jeśli replika pomocnicza jest ustawiona na tylko intencję odczytu, połączenie z pomocniczym musi określić intencję aplikacji w parametrach połączenia przez dodanie elementu applicationintent=readonly. W przeciwnym razie sprawdzanie sys.dm_exec_requests dostępu dla baz danych w grupie dostępności nie jest przekazywane, nawet jeśli VIEW SERVER STATE uprawnienie jest obecne.
W przypadku programu SQL Server 2022 (16.x) i nowszych wersji sys.dm_exec_requests wymagane jest uprawnienie WYŚWIETL STAN WYDAJNOŚCI SERWERA na serwerze.
Przykłady
Odp. Znajdowanie tekstu zapytania dla uruchomionej partii
Poniższe przykładowe zapytania sys.dm_exec_requests , aby znaleźć interesujące zapytanie i skopiować je sql_handle z danych wyjściowych.
SELECT * FROM sys.dm_exec_requests;
GO
Następnie, aby uzyskać tekst instrukcji, użyj skopiowanego sql_handle z funkcją systemową sys.dm_exec_sql_text(sql_handle).
SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO
B. Pokaż aktywne żądania
W poniższym przykładzie pokazano wszystkie aktualnie uruchomione zapytania w magazynie danych programu SQL Server, z wyłączeniem własnej sesji (@@SPID). Używa polecenia CROSS APPLY z poleceniem sys.dm_exec_sql_text , aby pobrać pełny tekst zapytania dla każdego żądania i łączy się z elementem sys.dm_exec_sessions w celu uwzględnienia informacji o hoście użytkownika. Filtr session_id <> @@SPID gwarantuje, że nie widzisz własnego zapytania w wynikach.
SELECT r.session_id,
r.status,
r.command,
r.start_time,
r.total_elapsed_time / 1000.00 AS elapsed_seconds,
r.cpu_time / 1000.00 AS cpu_seconds,
r.reads,
r.writes,
r.logical_reads,
r.row_count,
s.login_name,
s.host_name,
t.text AS query_text
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_exec_sessions AS s
ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE r.session_id <> @@SPID
ORDER BY r.start_time DESC;
C. Znajdź wszystkie blokady, w których jest przechowywana uruchomiona partia
Poniższe przykładowe zapytania sys.dm_exec_requests w celu znalezienia interesującej partii i skopiowania jej transaction_id z danych wyjściowych.
SELECT * FROM sys.dm_exec_requests;
GO
Następnie, aby znaleźć informacje o blokadzie, użyj skopiowanego transaction_id z funkcją sys.dm_tran_lockssystemową .
SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
AND request_owner_id = < copied transaction_id >;
GO
D. Znajdowanie wszystkich aktualnie zablokowanych żądań
Poniższe przykładowe zapytania sys.dm_exec_requests dotyczące znajdowania informacji o zablokowanych żądaniach.
SELECT session_id,
status,
blocking_session_id,
wait_type,
wait_time,
wait_resource,
transaction_id
FROM sys.dm_exec_requests
WHERE status = N'suspended';
GO
E. Zamawianie istniejących żądań według procesora CPU
SELECT [req].[session_id],
[req].[start_time],
[req].[cpu_time] AS [cpu_time_ms],
OBJECT_NAME([ST].[objectid], [ST].[dbid]) AS [ObjectName],
SUBSTRING(
REPLACE(
REPLACE(
SUBSTRING(
[ST].[text], ([req].[statement_start_offset] / 2) + 1,
((CASE [req].[statement_end_offset]
WHEN -1 THEN DATALENGTH([ST].[text])
ELSE [req].[statement_end_offset]
END - [req].[statement_start_offset]
) / 2
) + 1
), CHAR(10), ' '
), CHAR(13), ' '
), 1, 512
) AS [statement_text]
FROM
[sys].[dm_exec_requests] AS [req]
CROSS APPLY [sys].dm_exec_sql_text([req].[sql_handle]) AS [ST]
ORDER BY
[req].[cpu_time] DESC;
GO
Powiązana zawartość
- dynamiczne widoki zarządzania systemu
- Dynamiczne widoki zarządzania i funkcje związane z wykonywaniem (Transact-SQL)
- sys.dm_os_memory_clerks (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)
- sys.dm_exec_query_memory_grants (Transact-SQL)
- sys.dm_exec_query_plan (Transact-SQL)
- sys.dm_exec_sql_text (Transact-SQL)
- SQL Server, obiekt SQL Statistics
- Przewodnik po architekturze przetwarzania zapytań
- Przewodnik po architekturze wątków i zadań
- Przewodnik dotyczący blokowania transakcji i wersjonowania wierszy
- Informacje i rozwiązywanie problemów z blokowaniem programu SQL Server