Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu 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
Magazyn 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 cofnięcie 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: Wybierz 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_handle funkcją , statement_end_offset i 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_handle funkcją , statement_start_offset i 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_id 0 wartość , 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. 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 REORGANIZE AUTO_SHRINK opcja z ALTER DATABASE BACKUP DATABASE DBCC CHECKDB DBCC CHECKFILEGROUP DBCC CHECKTABLE DBCC INDEXDEFRAG DBCC SHRINKDATABASE DBCC SHRINKFILE RECOVERY RESTORE DATABASE ROLLBACK TDE ENCRYPTION Nie 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 = Serializable 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_reads
i row_count
nie są aktualizowane dla wątku koordynatora. Kolumny wait_type
, , last_wait_type
wait_time
, wait_resource
i 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_locks
systemową .
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