Sdílet prostřednictvím


sys.dm_exec_requests (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)koncový bod SQL Analytics ve službě Microsoft FabricÚložiště v Microsoft Fabric

Vrací informace o každé žádosti, která se spouští na SQL Serveru. Další informace o požadavcích najdete v průvodci architekturou vláken a úloh.

Poznámka:

Pokud ho chcete volat z vyhrazeného fondu SQL ve službě Azure Synapse Analytics nebo PDW (Platform System), přečtěte si sys.dm_pdw_exec_requests. Pro bezserverový fond SQL nebo Microsoft Fabric použijte sys.dm_exec_requests.

Název sloupce Datový typ Popis
session_id smallint ID relace, ke které tento požadavek souvisí. Není nulovatelný.
request_id int ID požadavku. Jedinečné v kontextu relace. Není nulovatelný.
start_time datum a čas Časové razítko, kdy žádost přišla. Není nulovatelný.
status nvarchar(30) Stav žádosti Může to být jedna z následujících hodnot:

pozadí
vrácení zpět
běží
spustitelný
spánek
pozastavený

Není nulovatelný.
command nvarchar(32) Identifikuje aktuální typ zpracovávaného příkazu. Mezi běžné typy příkazů patří následující hodnoty:

VYBRAT
VLOŽIT
Aktualizace
VYMAZAT
PROTOKOL ZÁLOHOVÁNÍ
ZÁLOHOVAT DATABÁZI
DBCC
PRO

Text požadavku lze načíst pomocí sys.dm_exec_sql_text odpovídajícího sql_handle požadavku. Interní systémové procesy nastaví příkaz na základě typu úlohy, kterou provádějí. Úkoly můžou obsahovat následující hodnoty:

LOCK MONITOR
CHECKPOINTLAZY
SPISOVATEL

Není nulovatelný.
sql_handle varbinary(64) Token, který jednoznačně identifikuje dávku nebo uloženou proceduru, na které je dotaz součástí. Nulovatelný.
statement_start_offset int Označuje počáteční pozici aktuálně spouštěného příkazu v bajtech počínaje číslem 0 pro aktuálně spuštěný dávkový nebo trvalý objekt. Lze použít společně s sql_handlefunkcí , a statement_end_offsetsys.dm_exec_sql_text dynamickou správu k načtení aktuálně prováděného příkazu pro požadavek. Nulovatelný.
statement_end_offset int Označuje, v bajtech, počínaje 0, koncovou pozici aktuálně spouštěného příkazu pro aktuálně spuštěný dávkový nebo trvalý objekt. Lze použít společně s sql_handlefunkcí , a statement_start_offsetsys.dm_exec_sql_text dynamickou správu k načtení aktuálně prováděného příkazu pro požadavek. Nulovatelný.
plan_handle varbinary(64) Token, který jednoznačně identifikuje plán provádění dotazů pro dávku, která se právě spouští. Nulovatelný.
database_id smallint ID databáze, pro kterou se požadavek spouští. Není nulovatelný.

Ve službě Azure SQL Database jsou hodnoty jedinečné v rámci jedné databáze nebo elastického fondu, ale ne v rámci logického serveru.
user_id int ID uživatele, který žádost odeslal. Není nulovatelný.
connection_id jedinečnýidentifikátor ID připojení, na kterém žádost přišla. Nulovatelný.
blocking_session_id smallint ID relace, která blokuje požadavek. Pokud je NULL tento sloupec nebo 0, požadavek není zablokovaný nebo informace o relaci blokující relace nejsou k dispozici (nebo není možné ji identifikovat). Další informace naleznete v tématu Vysvětlení a řešení problémů s blokováním SQL Serveru.

-2 = Blokující prostředek je vlastněn osamocenou distribuovanou transakcí.

-3 = Blokující prostředek je vlastněn odloženou transakcí obnovení.

-4 = session_id vlastníka blokující západky nelze v tuto chvíli určit z důvodu vnitřních přechodů stavu západky.

-5 = session_id vlastníka blokující západky nebylo možné určit, protože není sledován pro tento typ západky (například pro západku SH).

Sama o sobě blocking_session_id-5 neznamená problém s výkonem. -5 označuje, že relace čeká na dokončení asynchronní akce. Před -5 zavedením by se stejná relace zobrazila blocking_session_id0, i když byla stále ve stavu čekání.

V závislosti na úloze může být pozorování blocking_session_id = -5 běžným výskytem.
wait_type nvarchar(60) Pokud je požadavek aktuálně blokovaný, vrátí tento sloupec typ čekání. Nulovatelný.

Informace o typech čekání najdete v tématu sys.dm_os_wait_stats.
wait_time int Pokud je požadavek aktuálně blokovaný, vrátí tento sloupec dobu trvání v milisekundách aktuálního čekání. Není nulovatelný.
last_wait_type nvarchar(60) Pokud byl tento požadavek dříve zablokovaný, vrátí tento sloupec typ posledního čekání. Není nulovatelný.
wait_resource nvarchar(256) Pokud je požadavek aktuálně blokovaný, vrátí tento sloupec prostředek, na který právě čeká požadavek. Není nulovatelný.
open_transaction_count int Počet transakcí, které jsou pro tento požadavek otevřené. Není nulovatelný.
open_resultset_count int Počet sad výsledků, které jsou pro tento požadavek otevřené. Není nulovatelný.
transaction_id bigint ID transakce, ve které se tento požadavek provede. Není nulovatelný.
context_info varbinary(128) CONTEXT_INFO hodnotu relace. Nulovatelný.
percent_complete skutečné Procento dokončené práce pro následující příkazy:

ALTER INDEX REORGANIZE
AUTO_SHRINK možnost s možností ALTER DATABASE
BACKUP DATABASE
DBCC CHECKDB
DBCC CHECKFILEGROUP
DBCC CHECKTABLE
DBCC INDEXDEFRAG
DBCC SHRINKDATABASE
DBCC SHRINKFILE
RECOVERY
RESTORE DATABASE
ROLLBACK
TDE ENCRYPTION

Není nulovatelný.
estimated_completion_time bigint Pouze interní. Není nulovatelný.
cpu_time int Čas procesoru v milisekundách, který požadavek používá. Není nulovatelný.
total_elapsed_time int Celková doba uplynulá v milisekundách od přijetí požadavku. Není nulovatelný.
scheduler_id int ID plánovače, který plánuje tento požadavek. Nulovatelný.
task_address varbinary(8) Adresa paměti přidělená úkolu přidruženému k tomuto požadavku. Nulovatelný.
reads bigint Počet čtení provedených tímto požadavkem Není nulovatelný.
writes bigint Počet zápisů provedených tímto požadavkem Není nulovatelný.
logical_reads bigint Počet logickýchčteních Není nulovatelný.
text_size int NASTAVENÍ TEXTIZE pro tento požadavek. Není nulovatelný.
language nvarchar(128) Nastavení jazyka pro požadavek. Nulovatelný.
date_format nvarchar(3) Nastavení DATEFORMAT pro požadavek Nulovatelný.
date_first smallint Nastavení DATEFIRST pro požadavek Není nulovatelný.
quoted_identifier bit 1 = QUOTED_IDENTIFIER je pro požadavek zapnuto. Jinak je to 0.

Není nulovatelný.
arithabort bit 1 = Nastavení ARITHABORT je pro požadavek zapnuté. Jinak je to 0.

Není nulovatelný.
ansi_null_dflt_on bit 1 = ANSI_NULL_DFLT_ON nastavení je pro požadavek zapnuté. Jinak je to 0.

Není nulovatelný.
ansi_defaults bit 1 = ANSI_DEFAULTS nastavení je pro požadavek zapnuté. Jinak je to 0.

Není nulovatelný.
ansi_warnings bit 1 = ANSI_WARNINGS nastavení je pro požadavek zapnuté. Jinak je to 0.

Není nulovatelný.
ansi_padding bit 1 = ANSI_PADDING nastavení je pro požadavek zapnuté.

Jinak je to 0.

Není nulovatelný.
ansi_nulls bit 1 = ANSI_NULLS nastavení je pro požadavek zapnuté. Jinak je to 0.

Není nulovatelný.
concat_null_yields_null bit 1 = CONCAT_NULL_YIELDS_NULL nastavení je pro požadavek zapnuté. Jinak je to 0.

Není nulovatelný.
transaction_isolation_level smallint Úroveň izolace, se kterou se vytvoří transakce pro tento požadavek. Není nulovatelný.
0 = Nezadané
1 = ReadUncommitted
2 = ReadCommitted
3 = Opakovatelné
4 = Serializovatelné
5 = Snímek
lock_timeout int Období časového limitu uzamčení v milisekundách pro tento požadavek Není nulovatelný.
deadlock_priority int DEADLOCK_PRIORITY nastavení požadavku. Není nulovatelný.
row_count bigint Počet řádků vrácených klientovi tímto požadavkem Není nulovatelný.
prev_error int Poslední chyba, ke které došlo během provádění požadavku. Není nulovatelný.
nest_level int Aktuální úroveň vnoření kódu, který se spouští na požadavku. Není nulovatelný.
granted_query_memory int Počet stránek přidělených k provedení dotazu na požadavek Není nulovatelný.
executing_managed_code bit Určuje, jestli konkrétní požadavek aktuálně spouští objekty common language runtime, jako jsou rutiny, typy a triggery. Je nastavená na plný čas, kdy je objekt modulu CLR (Common Language Runtime) v zásobníku, i když běží Transact-SQL z modulu CLR (Common Language Runtime). Není nulovatelný.
group_id int ID skupiny úloh, do které tento dotaz patří. Není nulovatelný.
query_hash binární(8) Binární hodnota hash vypočítaná v dotazu a použitá k identifikaci dotazů s podobnou logikou. Pomocí hodnoty hash dotazu můžete určit agregované využití prostředků pro dotazy, které se liší pouze podle hodnot literálů.
query_plan_hash binární(8) Binární hodnota hash vypočítaná v plánu provádění dotazu a použitá k identifikaci podobných plánů provádění dotazů. K vyhledání kumulativních nákladů na dotazy s podobnými plány spuštění můžete použít hodnotu hash plánu dotazu.
statement_sql_handle varbinary(64) platí pro: SQL Server 2014 (12.x) a novější.

sql_handle jednotlivého dotazu.

Tento sloupec je NULL v případě, že úložiště dotazů není pro databázi povolené.
statement_context_id bigint platí pro: SQL Server 2014 (12.x) a novější.

Volitelný cizí klíč pro sys.query_context_settings.

Tento sloupec je NULL v případě, že úložiště dotazů není pro databázi povolené.
dop int platí pro: SQL Server 2016 (13.x) a novější.

Stupeň paralelismu dotazu.
parallel_worker_count int platí pro: SQL Server 2016 (13.x) a novější.

Počet rezervovaných paralelních pracovních procesů, pokud se jedná o paralelní dotaz.
external_script_request_id jedinečnýidentifikátor platí pro: SQL Server 2016 (13.x) a novější.

ID požadavku externího skriptu přidružené k aktuálnímu požadavku.
is_resumable bit platí pro: SQL Server 2017 (14.x) a novější.

Určuje, jestli je požadavek resumable index operace.
page_resource binární(8) platí pro: SQL Server 2019 (15.x)

Šestnáctková reprezentace prostředku stránky s 8 bajty, pokud wait_resource sloupec obsahuje stránku. Další informace najdete v tématu sys.fn_PageResCracker.
page_server_reads bigint Platí pro: Azure SQL Database Hyperscale

Počet čtení stránkového serveru provedených tímto požadavkem Není nulovatelný.
dist_statement_id jedinečnýidentifikátor Platí pro: SQL Server 2022 a novější verze, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics (jenom bezserverové fondy) a Microsoft Fabric.

Jedinečné ID příkazu pro odeslaný požadavek. Není nulovatelný.

Poznámky

Pokud chcete spustit kód, který je mimo SQL Server (například rozšířené uložené procedury a distribuované dotazy), musí vlákno provést mimo kontrolu ne preemptivního plánovače. K tomu se pracovní proces přepne do preemptivního režimu. Hodnoty času vrácené tímto zobrazením dynamické správy nezahrnují čas strávený v preemptivním režimu.

Při provádění paralelních požadavků v režimu řádků sql Server přiřadí pracovní vlákno ke koordinaci pracovních vláken zodpovědných za dokončení úkolů přiřazených jim. V tomto zobrazení dynamické správy je pro požadavek viditelné pouze vlákno koordinátoru. Sloupce reads, writes, logical_readsa row_countnejsou aktualizovány pro koordinační vlákno. Sloupce wait_type, wait_time, last_wait_typewait_resourcea granted_query_memory jsou aktualizovány pouze pro koordinační vlákno. Další informace najdete v průvodci architekturou vláken a úloh.

Sloupec wait_resource obsahuje podobné informace jako resource_description v sys.dm_tran_locks , ale je formátován odlišně.

Dovolení

Pokud má VIEW SERVER STATE uživatel na serveru oprávnění, zobrazí se na instanci SQL Serveru všechny spuštěné relace. V opačném případě se uživateli zobrazí pouze aktuální relace. VIEW SERVER STATE Ve službě Azure SQL Database se nedá udělit, takže sys.dm_exec_requests je vždy omezeno na aktuální připojení.

Ve scénářích skupiny dostupnosti, pokud je sekundární replika nastavená jen pro čtení, musí připojení k sekundárnímu objektu zadat záměr aplikace v parametrech připojovacího řetězce přidáním applicationintent=readonly. Jinak kontrola sys.dm_exec_requests přístupu neprojde pro databáze ve skupině dostupnosti, i když VIEW SERVER STATE je k dispozici oprávnění.

Pro SQL Server 2022 (16.x) a novější verze vyžaduje sys.dm_exec_requests na serveru oprávnění ZOBRAZIT STAV VÝKONU SERVERU.

Příklady

A. Vyhledání textu dotazu pro spuštěnou dávku

Následující ukázkové sys.dm_exec_requests dotazy najdou zajímavý dotaz a zkopírují ho sql_handle z výstupu.

SELECT * FROM sys.dm_exec_requests;
GO

Potom k získání textu příkazu použijte zkopírovanou sql_handle s systémovou funkcí sys.dm_exec_sql_text(sql_handle).

SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO

B. Zobrazení aktivních požadavků

Následující příklad ukazuje všechny aktuálně spuštěné dotazy v datovém skladu SQL Serveru s výjimkou vlastní relace (@@SPID). Používá CROSS APPLYsys.dm_exec_sql_text se k načtení celého textu dotazu pro každý požadavek a spojení s sys.dm_exec_sessions cílem zahrnout uživatele všechny informace o hostiteli. Filtr session_id <> @@SPID zajistí, že ve výsledcích neuvidíte vlastní dotaz.

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. Vyhledání všech zámků, které má spuštěná dávka

Následující ukázkové sys.dm_exec_requests dotazy najdou zajímavou dávku a zkopírují ji transaction_id z výstupu.

SELECT * FROM sys.dm_exec_requests;
GO

Pak k vyhledání informací o zámku použijte zkopírovanou transaction_id funkci systému sys.dm_tran_locks.

SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
    AND request_owner_id = < copied transaction_id >;
GO

D. Vyhledání všech aktuálně blokovaných požadavků

Následující příklady dotazů sys.dm_exec_requests na vyhledání informací o blokovaných požadavcích.

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. Objednání existujících požadavků podle procesoru

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