Dela via


sys.dm_exec_requests (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft Fabric

Returnerar information om varje begäran som körs i SQL Server. Mer information om begäranden finns i guiden Tråd- och uppgiftsarkitektur.

Anmärkning

Information om hur du anropar detta från en dedikerad SQL-pool i Azure Synapse Analytics eller Analytics Platform System (PDW) finns i sys.dm_pdw_exec_requests. För serverlös SQL-pool eller Microsoft Fabric använder du sys.dm_exec_requests.

Kolumnnamn Datatyp Beskrivning
session_id smallint ID för den session som den här begäran är relaterad till. Inte nullbar.
request_id int ID för begäran. Unikt i kontexten för sessionen. Inte nullbar.
start_time datetime Tidsstämpel när begäran kom. Inte nullbar.
status nvarchar(30) Status för begäran. Kan vara något av följande värden:

bakgrund
tillbakagång
körs
Körbar
sova
avstängd

Inte nullbar.
command nvarchar(32) Identifierar den aktuella typen av kommando som bearbetas. Vanliga kommandotyper innehåller följande värden:

VÄLJ
INFOGA
UPPDATERA
TA BORT
SÄKERHETSKOPIERINGSLOGG
SÄKERHETSKOPIERINGSDATABAS
DBCC
FÖR

Texten i begäran kan hämtas med hjälp sys.dm_exec_sql_text av motsvarande sql_handle för begäran. Interna systemprocesser anger kommandot baserat på vilken typ av uppgift de utför. Aktiviteter kan innehålla följande värden:

LÅS ÖVERVAKARE
CHECKPOINTLAZY
FÖRFATTARE

Inte nullbar.
sql_handle varbinary(64) En token som unikt identifierar den batch eller lagrade procedur som frågan ingår i. Nullbar.
statement_start_offset int Anger, i byte, från och med 0, startpositionen för den körningsinstruktor som körs för den batch som körs för närvarande eller det bevarade objektet. Kan användas tillsammans med sql_handlefunktionen , statement_end_offsetoch dynamisk sys.dm_exec_sql_text hantering för att hämta instruktionen som körs för begäran. Nullbar.
statement_end_offset int Anger, i byte, från och med 0, slutpositionen för den körningsinstruktor som körs för den aktuella batchen eller det bevarade objektet. Kan användas tillsammans med sql_handlefunktionen , statement_start_offsetoch dynamisk sys.dm_exec_sql_text hantering för att hämta instruktionen som körs för begäran. Nullbar.
plan_handle varbinary(64) En token som unikt identifierar en frågekörningsplan för en batch som körs för närvarande. Nullbar.
database_id smallint ID för databasen som begäran körs mot. Inte nullbar.

I Azure SQL Database är värdena unika i en enskild databas eller en elastisk pool, men inte inom en logisk server.
user_id int ID för den användare som skickade begäran. Inte nullbar.
connection_id unika identifierare ID för anslutningen som begäran kom till. Nullbar.
blocking_session_id smallint ID för sessionen som blockerar begäran. Om den här kolumnen är NULL eller 0blockeras inte begäran eller sessionsinformationen för den blockerande sessionen inte är tillgänglig (eller kan inte identifieras). Mer information finns i Förstå och lösa problem med SQL Server-blockering.

-2 = Den blockerande resursen ägs av en överbliven distribuerad transaktion.

-3 = Den blockerande resursen ägs av en uppskjuten återställningstransaktion.

-4 = session_id av den blockerande låsägaren kunde inte fastställas just nu på grund av interna spärrtillståndsövergångar.

-5 = session_id av den blockerande låsägaren kunde inte fastställas eftersom den inte spåras för den här spärrtypen (till exempel för en SH-spärr).

I sig blocking_session_id-5 anger inte ett prestandaproblem. -5 är en indikation på att sessionen väntar på att en asynkron åtgärd ska slutföras. Innan -5 introducerades skulle samma session ha visat blocking_session_id0, även om den fortfarande var i väntetillstånd.

Beroende på arbetsbelastning kan det vara vanligt att observera blocking_session_id = -5 .
wait_type nvarchar(60) Om begäran för närvarande är blockerad returnerar den här kolumnen typen av väntan. Nullbar.

Information om typer av väntetider finns i sys.dm_os_wait_stats.
wait_time int Om begäran för närvarande är blockerad returnerar den här kolumnen varaktigheten i millisekunder, för den aktuella väntetiden. Inte nullbar.
last_wait_type nvarchar(60) Om den här begäran tidigare har blockerats returnerar den här kolumnen typen av sista väntan. Inte nullbar.
wait_resource nvarchar(256) Om begäran för närvarande är blockerad returnerar den här kolumnen den resurs som begäran väntar på. Inte nullbar.
open_transaction_count int Antal transaktioner som är öppna för den här begäran. Inte nullbar.
open_resultset_count int Antal resultatuppsättningar som är öppna för den här begäran. Inte nullbar.
transaction_id bigint ID för transaktionen där den här begäran körs. Inte nullbar.
context_info varbinary(128) CONTEXT_INFO värdet för sessionen. Nullbar.
percent_complete riktiga Procentandel av arbetet som har slutförts för följande kommandon:

ALTER INDEX REORGANIZE
AUTO_SHRINK alternativet med ALTER DATABASE
BACKUP DATABASE
DBCC CHECKDB
DBCC CHECKFILEGROUP
DBCC CHECKTABLE
DBCC INDEXDEFRAG
DBCC SHRINKDATABASE
DBCC SHRINKFILE
RECOVERY
RESTORE DATABASE
ROLLBACK
TDE ENCRYPTION

Inte nullbar.
estimated_completion_time bigint Endast internt. Inte nullbar.
cpu_time int CPU-tid i millisekunder som används av begäran. Inte nullbar.
total_elapsed_time int Total tid som förflutit i millisekunder sedan begäran kom. Inte nullbar.
scheduler_id int ID för schemaläggaren som schemalägger den här begäran. Nullbar.
task_address varbinary(8) Minnesadress som allokerats till den uppgift som är associerad med den här begäran. Nullbar.
reads bigint Antal läsningar som utförs av den här begäran. Inte nullbar.
writes bigint Antal skrivningar som utförs av den här begäran. Inte nullbar.
logical_reads bigint Antal logiska läsningar som har utförts av begäran. Inte nullbar.
text_size int TEXTSTORLEKsinställning för den här begäran. Inte nullbar.
language nvarchar(128) Språkinställning för begäran. Nullbar.
date_format nvarchar(3) DATEFORMAT-inställning för begäran. Nullbar.
date_first smallint DATEFIRST-inställning för begäran. Inte nullbar.
quoted_identifier bit 1 = QUOTED_IDENTIFIER är PÅ för begäran. Annars är det 0.

Inte nullbar.
arithabort bit 1 = ARITHABORT-inställningen är PÅ för begäran. Annars är det 0.

Inte nullbar.
ansi_null_dflt_on bit 1 = ANSI_NULL_DFLT_ON inställningen är PÅ för begäran. Annars är det 0.

Inte nullbar.
ansi_defaults bit 1 = inställningen ANSI_DEFAULTS är PÅ för begäran. Annars är det 0.

Inte nullbar.
ansi_warnings bit 1 = inställningen ANSI_WARNINGS är PÅ för begäran. Annars är det 0.

Inte nullbar.
ansi_padding bit 1 = inställningen ANSI_PADDING är PÅ för begäran.

Annars är det 0.

Inte nullbar.
ansi_nulls bit 1 = ANSI_NULLS inställningen är PÅ för begäran. Annars är det 0.

Inte nullbar.
concat_null_yields_null bit 1 = CONCAT_NULL_YIELDS_NULL inställningen är PÅ för begäran. Annars är det 0.

Inte nullbar.
transaction_isolation_level smallint Isoleringsnivå som transaktionen för den här begäran skapas med. Inte nullbar.
0 = Ospecificerad
1 = ReadUncommitted
2 = ReadCommitted
3 = Repeterbar
4 = Serializable
5 = Ögonblicksbild
lock_timeout int Lås tidsgränsen i millisekunder för den här begäran. Inte nullbar.
deadlock_priority int DEADLOCK_PRIORITY inställning för begäran. Inte nullbar.
row_count bigint Antal rader som har returnerats till klienten av den här begäran. Inte nullbar.
prev_error int Det senaste felet som inträffade under körningen av begäran. Inte nullbar.
nest_level int Aktuell kapslingsnivå för kod som körs på begäran. Inte nullbar.
granted_query_memory int Antal sidor som allokerats till körningen av en fråga i begäran. Inte nullbar.
executing_managed_code bit Anger om en specifik begäran för närvarande kör vanliga språkkörningsobjekt, till exempel rutiner, typer och utlösare. det är inställt på heltid som ett vanligt språkkörningsobjekt finns på stacken, även när Transact-SQL körs inifrån common language runtime. Inte nullbar.
group_id int ID för den arbetsbelastningsgrupp som frågan tillhör. Inte nullbar.
query_hash binär(8) Binär hash-värde som beräknas på frågan och används för att identifiera frågor med liknande logik. Du kan använda frågehashen för att fastställa den aggregerade resursanvändningen för frågor som endast skiljer sig åt med literalvärden.
query_plan_hash binär(8) Binär hash-värde som beräknas på frågekörningsplanen och används för att identifiera liknande frågekörningsplaner. Du kan använda hash för frågeplan för att hitta den kumulativa kostnaden för frågor med liknande körningsplaner.
statement_sql_handle varbinary(64) gäller för: SQL Server 2014 (12.x) och senare.

sql_handle av den enskilda frågan.

Den här kolumnen är NULL om Query Store inte är aktiverat för databasen.
statement_context_id bigint gäller för: SQL Server 2014 (12.x) och senare.

Den valfria sekundärnyckeln till sys.query_context_settings.

Den här kolumnen är NULL om Query Store inte är aktiverat för databasen.
dop int gäller för: SQL Server 2016 (13.x) och senare.

Graden av parallellitet i frågan.
parallel_worker_count int gäller för: SQL Server 2016 (13.x) och senare.

Antalet reserverade parallella arbetare om det här är en parallell fråga.
external_script_request_id unika identifierare gäller för: SQL Server 2016 (13.x) och senare.

Det externa skriptbegärande-ID som är associerat med den aktuella begäran.
is_resumable bit gäller för: SQL Server 2017 (14.x) och senare.

Anger om begäran är en indexåtgärd som kan återupptas.
page_resource binär(8) gäller för: SQL Server 2019 (15.x)

En hexadecimal representation på 8 byte av sidresursen wait_resource om kolumnen innehåller en sida. Mer information finns i sys.fn_PageResCracker.
page_server_reads bigint Gäller för: Azure SQL Database Hyperscale

Antal sidserverläsningar som utförs av den här begäran. Inte nullbar.
dist_statement_id unika identifierare Gäller för: SQL Server 2022 och senare versioner, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics (endast serverlösa pooler) och Microsoft Fabric

Unikt ID för -instruktionen för den skickade begäran. Inte nullbar.

Anmärkningar

För att köra kod utanför SQL Server (till exempel utökade lagrade procedurer och distribuerade frågor) måste en tråd köras utanför den icke-förebyggande schemaläggarens kontroll. För att göra detta växlar en arbetare till förebyggande läge. Tidsvärden som returneras av den här dynamiska hanteringsvyn inkluderar inte tid i förebyggande läge.

När parallella begäranden körs i radläge tilldelar SQL Server en arbetstråd för att samordna de arbetstrådar som ansvarar för att utföra uppgifter som tilldelats dem. I den här DMV:en visas endast koordinatortråden för begäran. Kolumnerna reads, writes, logical_readsoch row_countuppdateras inte för koordinatortråden. Kolumnerna wait_type, wait_time, last_wait_type, wait_resourceoch granted_query_memoryuppdateras endast för koordinatortråden. Mer information finns i tråd- och aktivitetsarkitekturguiden.

Kolumnen wait_resource innehåller liknande information som resource_description i sys.dm_tran_locks men formateras på olika sätt.

Behörigheter

Om användaren har VIEW SERVER STATE behörighet på servern ser användaren alla körningssessioner på SQL Server-instansen. Annars ser användaren bara den aktuella sessionen. VIEW SERVER STATE kan inte beviljas i Azure SQL Database så sys.dm_exec_requests är alltid begränsad till den aktuella anslutningen.

Om den sekundära repliken är inställd på skrivskyddad i scenarier med tillgänglighetsgrupp måste anslutningen till den sekundära filen ange sin program avsikt i anslutningssträngsparametrarna genom att lägga till applicationintent=readonly. Annars godkänns inte åtkomstkontrollen för sys.dm_exec_requests databaser i tillgänglighetsgruppen, även om VIEW SERVER STATE behörighet finns.

För SQL Server 2022 (16.x) och senare versioner sys.dm_exec_requests krävs behörighet för VIEW SERVER PERFORMANCE STATE på servern.

Exempel

A. Hitta frågetexten för en batch som körs

I följande exempel frågar sys.dm_exec_requests du efter den intressanta frågan och kopierar den sql_handle från utdata.

SELECT * FROM sys.dm_exec_requests;
GO

Använd sedan den kopierade sql_handle med systemfunktionen för att hämta instruktionstexten sys.dm_exec_sql_text(sql_handle).

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

B. Visa aktiva begäranden

I följande exempel visas alla frågor som körs i ditt SQL Server-informationslager, exklusive din egen session (@@SPID). Den använder CROSS APPLY med sys.dm_exec_sql_text för att hämta den fullständiga frågetexten för varje begäran och ansluter sys.dm_exec_sessions till för att inkludera användarens värdinformation. Filtret session_id <> @@SPID ser till att du inte ser din egen fråga i resultatet.

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. Hitta alla lås som en batch som körs håller

I följande exempel frågar sys.dm_exec_requests du efter den intressanta batchen och kopierar den transaction_id från utdata.

SELECT * FROM sys.dm_exec_requests;
GO

Använd sedan den kopierade transaction_id med systemfunktionen sys.dm_tran_locksför att hitta låsinformation.

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

D. Hitta alla för närvarande blockerade begäranden

Följande exempel frågar sys.dm_exec_requests efter information om blockerade begäranden.

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. Beställa befintliga begäranden efter 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