Delen via


sys.dm_exec_requests (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft Fabric

Retourneert informatie over elke aanvraag die wordt uitgevoerd in SQL Server. Zie de handleiding thread- en taakarchitectuur voor meer informatie over aanvragen.

Opmerking

Zie sys.dm_pdw_exec_requests om dit aan te roepen vanuit een toegewezen SQL-pool in Azure Synapse Analytics of Analytics Platform System (PDW). Gebruik voor een serverloze SQL-pool of Microsoft Fabric sys.dm_exec_requests.

Kolomnaam Gegevenstype Beschrijving
session_id smallint Id van de sessie waaraan deze aanvraag is gerelateerd. Niet nullwaarde.
request_id int Id van de aanvraag. Uniek in de context van de sessie. Niet nullwaarde.
start_time datum en tijd Tijdstempel wanneer de aanvraag is aangekomen. Niet nullwaarde.
status nvarchar(30) Status van de aanvraag. Dit kan een van de volgende waarden zijn:

achtergrond
Terugdraaien
rennen
uitvoerbaar
aan het slapen
opgeschort

Niet nullwaarde.
command nvarchar(32) Identificeert het huidige type opdracht dat wordt verwerkt. Algemene opdrachttypen bevatten de volgende waarden:

SELECTEREN
INSERT
Actualisatie
Verwijderen
BACK-UPLOGBOEK
BACK-UPDATABASE
DBCC
VOOR

De tekst van de aanvraag kan worden opgehaald met behulp van sys.dm_exec_sql_text de bijbehorende sql_handle voor de aanvraag. Interne systeemprocessen stellen de opdracht in op basis van het type taak dat ze uitvoeren. Taken kunnen de volgende waarden bevatten:

MONITOR VERGRENDELEN
CHECKPOINTLAZY
SCHRIJVER

Niet nullwaarde.
sql_handle varbinary(64) Een token waarmee de batch of opgeslagen procedure waarvan de query deel uitmaakt, uniek wordt geïdentificeerd. Nullable.
statement_start_offset int Geeft in bytes, beginnend met 0, de beginpositie van de huidige uitvoeringsinstructie voor het momenteel uitgevoerde batch- of persistente object aan. Kan samen met de sql_handle, de statement_end_offseten de sys.dm_exec_sql_text dynamische beheerfunctie worden gebruikt om de momenteel uitgevoerde instructie voor de aanvraag op te halen. Nullable.
statement_end_offset int Geeft in bytes, te beginnen met 0, de eindpositie van de huidige uitvoeringsinstructie voor het momenteel uitgevoerde batch- of persistente object. Kan samen met de sql_handle, de statement_start_offseten de sys.dm_exec_sql_text dynamische beheerfunctie worden gebruikt om de momenteel uitgevoerde instructie voor de aanvraag op te halen. Nullable.
plan_handle varbinary(64) Een token dat een queryuitvoeringsplan uniek identificeert voor een batch die momenteel wordt uitgevoerd. Nullable.
database_id smallint De id van de database waarmee de aanvraag wordt uitgevoerd. Niet nullwaarde.

In Azure SQL Database zijn de waarden uniek binnen één database of een elastische pool, maar niet binnen een logische server.
user_id int Id van de gebruiker die de aanvraag heeft ingediend. Niet nullwaarde.
connection_id uniqueidentifier Id van de verbinding waarop de aanvraag is aangekomen. Nullable.
blocking_session_id smallint Id van de sessie die de aanvraag blokkeert. Als deze kolom wel of NULL0niet wordt geblokkeerd, is de aanvraag niet geblokkeerd of is de sessiegegevens van de blokkerende sessie niet beschikbaar (of kunnen niet worden geïdentificeerd). Zie Problemen met blokkerende SQL Server begrijpen en oplossen voor meer informatie.

-2 = De blokkerende resource is eigendom van een zwevende gedistribueerde transactie.

-3 = De blokkerende resource is eigendom van een uitgestelde hersteltransactie.

-4 = session_id van de blokkerende vergrendelingseigenaar kan op dit moment niet worden bepaald vanwege interne vergrendelingsstatusovergangen.

-5 = session_id van de blokkeringseigenaar kan niet worden bepaald omdat deze niet wordt bijgehouden voor dit vergrendelingstype (bijvoorbeeld voor een SH-vergrendeling).

Geeft op zichzelf blocking_session_id-5 geen prestatieprobleem aan. -5 is een indicatie dat de sessie wacht op een asynchrone actie om te voltooien. Voordat -5 de sessie werd geïntroduceerd, zou dezelfde sessie hebben getoond blocking_session_id0, ook al was het nog steeds in een wachtstatus.

Afhankelijk van de workload kan het observeren blocking_session_id = -5 een veelvoorkomende gebeurtenis zijn.
wait_type nvarchar(60) Als de aanvraag momenteel is geblokkeerd, retourneert deze kolom het type wachttijd. Nullable.

Zie sys.dm_os_wait_stats voor informatie over typen wachttijden.
wait_time int Als de aanvraag momenteel is geblokkeerd, retourneert deze kolom de duur in milliseconden van de huidige wachttijd. Niet nullwaarde.
last_wait_type nvarchar(60) Als deze aanvraag eerder is geblokkeerd, retourneert deze kolom het type van de laatste wachttijd. Niet nullwaarde.
wait_resource nvarchar(256) Als de aanvraag momenteel is geblokkeerd, retourneert deze kolom de resource waarvoor de aanvraag momenteel wacht. Niet nullwaarde.
open_transaction_count int Aantal transacties dat is geopend voor deze aanvraag. Niet nullwaarde.
open_resultset_count int Het aantal resultatensets dat voor deze aanvraag is geopend. Niet nullwaarde.
transaction_id bigint Id van de transactie waarin deze aanvraag wordt uitgevoerd. Niet nullwaarde.
context_info varbinary(128) CONTEXT_INFO waarde van de sessie. Nullable.
percent_complete echte Percentage voltooid werk voor de volgende opdrachten:

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

Niet nullwaarde.
estimated_completion_time bigint Alleen intern. Niet nullwaarde.
cpu_time int CPU-tijd in milliseconden die door de aanvraag wordt gebruikt. Niet nullwaarde.
total_elapsed_time int De totale tijd die is verstreken in milliseconden sinds de aanvraag is aangekomen. Niet nullwaarde.
scheduler_id int Id van de planner die deze aanvraag plant. Nullable.
task_address varbinary(8) Geheugenadres dat is toegewezen aan de taak die aan deze aanvraag is gekoppeld. Nullable.
reads bigint Het aantal leesbewerkingen dat door deze aanvraag is uitgevoerd. Niet nullwaarde.
writes bigint Aantal schrijfbewerkingen dat door deze aanvraag wordt uitgevoerd. Niet nullwaarde.
logical_reads bigint Het aantal logische leesbewerkingen dat door de aanvraag is uitgevoerd. Niet nullwaarde.
text_size int DE INSTELLING SMS-FORMAAT voor deze aanvraag. Niet nullwaarde.
language nvarchar(128) Taalinstelling voor de aanvraag. Nullable.
date_format nvarchar(3) DATEFORMAT-instelling voor de aanvraag. Nullable.
date_first smallint DATEFIRST-instelling voor de aanvraag. Niet nullwaarde.
quoted_identifier bit 1 = QUOTED_IDENTIFIER is aan voor de aanvraag. Anders is het 0.

Niet nullwaarde.
arithabort bit 1 = ARITHABORT-instelling is ingeschakeld voor de aanvraag. Anders is het 0.

Niet nullwaarde.
ansi_null_dflt_on bit 1 = ANSI_NULL_DFLT_ON instelling is ingeschakeld voor de aanvraag. Anders is het 0.

Niet nullwaarde.
ansi_defaults bit 1 = ANSI_DEFAULTS instelling is ingeschakeld voor de aanvraag. Anders is het 0.

Niet nullwaarde.
ansi_warnings bit 1 = ANSI_WARNINGS instelling is ingeschakeld voor de aanvraag. Anders is het 0.

Niet nullwaarde.
ansi_padding bit 1 = ANSI_PADDING instelling is ingeschakeld voor de aanvraag.

Anders is het 0.

Niet nullwaarde.
ansi_nulls bit 1 = ANSI_NULLS instelling is ingeschakeld voor de aanvraag. Anders is het 0.

Niet nullwaarde.
concat_null_yields_null bit 1 = CONCAT_NULL_YIELDS_NULL instelling is ingeschakeld voor de aanvraag. Anders is het 0.

Niet nullwaarde.
transaction_isolation_level smallint Isolatieniveau waarmee de transactie voor deze aanvraag wordt gemaakt. Niet nullwaarde.
0 = Niet opgegeven
1 = ReadUncommitted
2 = ReadCommitted
3 = Herhaalbaar
4 = Serializeerbaar
5 = Momentopname
lock_timeout int Vergrendelingstime-outperiode in milliseconden voor deze aanvraag. Niet nullwaarde.
deadlock_priority int DEADLOCK_PRIORITY instelling voor de aanvraag. Niet nullwaarde.
row_count bigint Het aantal rijen dat door deze aanvraag aan de client is geretourneerd. Niet nullwaarde.
prev_error int Laatste fout die is opgetreden tijdens de uitvoering van de aanvraag. Niet nullwaarde.
nest_level int Huidig nestniveau van code dat wordt uitgevoerd op de aanvraag. Niet nullwaarde.
granted_query_memory int Het aantal pagina's dat is toegewezen aan de uitvoering van een query op de aanvraag. Niet nullwaarde.
executing_managed_code bit Hiermee wordt aangegeven of een specifieke aanvraag momenteel algemene runtimeobjecten voor taal uitvoert, zoals routines, typen en triggers. Het is ingesteld voor de volledige tijd dat een gemeenschappelijk runtime-object voor taal op de stack staat, zelfs tijdens het uitvoeren van Transact-SQL vanuit een algemene taalruntime. Niet nullwaarde.
group_id int Id van de workloadgroep waartoe deze query behoort. Niet nullwaarde.
query_hash binary(8) Binaire hashwaarde die wordt berekend op de query en wordt gebruikt om query's met vergelijkbare logica te identificeren. U kunt de query-hash gebruiken om het geaggregeerde resourcegebruik te bepalen voor query's die alleen verschillen per letterlijke waarden.
query_plan_hash binary(8) Binaire hashwaarde berekend op het queryuitvoeringsplan en wordt gebruikt om vergelijkbare queryuitvoeringsplannen te identificeren. U kunt hash van het queryplan gebruiken om de cumulatieve kosten van query's met vergelijkbare uitvoeringsplannen te vinden.
statement_sql_handle varbinary(64) Van toepassing op: SQL Server 2014 (12.x) en hoger.

sql_handle van de afzonderlijke query.

Deze kolom is NULL als Query Store niet is ingeschakeld voor de database.
statement_context_id bigint Van toepassing op: SQL Server 2014 (12.x) en hoger.

De optionele refererende sleutel aan sys.query_context_settings.

Deze kolom is NULL als Query Store niet is ingeschakeld voor de database.
dop int Van toepassing op: SQL Server 2016 (13.x) en hoger.

De mate van parallelle uitvoering van de query.
parallel_worker_count int Van toepassing op: SQL Server 2016 (13.x) en hoger.

Het aantal gereserveerde parallelle werkrollen als dit een parallelle query is.
external_script_request_id uniqueidentifier Van toepassing op: SQL Server 2016 (13.x) en hoger.

De externe scriptaanvraag-id die is gekoppeld aan de huidige aanvraag.
is_resumable bit van toepassing op: SQL Server 2017 (14.x) en hoger.

Geeft aan of de aanvraag een hervatbare indexbewerking is.
page_resource binary(8) van toepassing op: SQL Server 2019 (15.x)

Een hexadecimale weergave van 8 bytes van de paginaresource als de wait_resource kolom een pagina bevat. Zie sys.fn_PageResCracker voor meer informatie.
page_server_reads bigint Van toepassing op: Azure SQL Database Hyperscale

Aantal paginaserverleesbewerkingen uitgevoerd door deze aanvraag. Niet nullwaarde.
dist_statement_id uniqueidentifier Van toepassing op: SQL Server 2022 en latere versies, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics (alleen serverloze pools) en Microsoft Fabric

Unieke id voor de instructie voor de ingediende aanvraag. Niet nullwaarde.

Opmerkingen

Als u code wilt uitvoeren die zich buiten SQL Server bevindt (bijvoorbeeld uitgebreide opgeslagen procedures en gedistribueerde query's), moet een thread buiten het beheer van de niet-preventieve scheduler worden uitgevoerd. Hiervoor schakelt een werkrol over naar de voorlopige modus. Tijdwaarden die door deze dynamische beheerweergave worden geretourneerd, bevatten geen tijd die is besteed aan de voorlopige modus.

Bij het uitvoeren van parallelle aanvragen in de rijmodus wijst SQL Server een werkrolthread toe om de werkrolthreads te coördineren die verantwoordelijk zijn voor het voltooien van taken die aan hen zijn toegewezen. In deze DMV is alleen de coördinatorthread zichtbaar voor de aanvraag. De kolommenreads, writesen logical_readsrow_count worden niet bijgewerkt voor de coördinatorthread. De kolommenwait_type, wait_time, , last_wait_typeen wait_resourcegranted_query_memory worden alleen bijgewerkt voor de coördinatorthread. Zie de handleiding Thread en taakarchitectuurvoor meer informatie.

De wait_resource kolom bevat vergelijkbare informatie resource_description in sys.dm_tran_locks , maar is anders opgemaakt.

Machtigingen

Als de gebruiker gemachtigd is VIEW SERVER STATE voor de server, ziet de gebruiker alle uitvoeringssessies op het exemplaar van SQL Server. Anders ziet de gebruiker alleen de huidige sessie. VIEW SERVER STATE kan niet worden verleend in Azure SQL Database, dus sys.dm_exec_requests is altijd beperkt tot de huidige verbinding.

In scenario's met beschikbaarheidsgroepen, als de secundaire replica is ingesteld op alleen-lezen, moet de verbinding met de secundaire de toepassingsintentie opgeven in de parameters van de verbindingsreeks door toe te voegen applicationintent=readonly. Anders wordt de toegangscontrole sys.dm_exec_requests niet doorgegeven aan databases in de beschikbaarheidsgroep, zelfs niet als VIEW SERVER STATE de machtiging aanwezig is.

Voor SQL Server 2022 (16.x) en latere versies sys.dm_exec_requests is de machtiging VIEW SERVER PERFORMANCE STATE op de server vereist.

Voorbeelden

Eén. De querytekst voor een actieve batch zoeken

In het volgende voorbeeld worden query's uitgevoerd sys.dm_exec_requests om de interessante query te vinden en de query uit de uitvoer te kopiëren sql_handle .

SELECT * FROM sys.dm_exec_requests;
GO

Als u vervolgens de instructietekst wilt ophalen, gebruikt u de gekopieerde sql_handle functie met de systeemfunctie sys.dm_exec_sql_text(sql_handle).

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

B. Actieve aanvragen weergeven

In dit volgende voorbeeld ziet u alle query's die momenteel worden uitgevoerd in uw SQL Server-datawarehouse, met uitzondering van uw eigen sessie (@@SPID). Hierbij wordt CROSS APPLYsys.dm_exec_sql_text gebruikgemaakt van het ophalen van de volledige querytekst voor elke aanvraag en wordt samengevoegd om sys.dm_exec_sessions alle hostgegevens van de gebruiker op te nemen. Het session_id <> @@SPID filter zorgt ervoor dat u uw eigen query niet in de resultaten ziet.

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. Alle vergrendelingen zoeken die een actieve batch vasthoudt

In het volgende voorbeeld worden query's uitgevoerd sys.dm_exec_requests om de interessante batch te vinden en de bijbehorende batch uit de uitvoer te kopiëren transaction_id .

SELECT * FROM sys.dm_exec_requests;
GO

Als u vervolgens vergrendelingsgegevens wilt zoeken, gebruikt u de gekopieerde transaction_id gegevens met de systeemfunctie 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. Alle momenteel geblokkeerde aanvragen zoeken

In het volgende voorbeeld worden query's uitgevoerd sys.dm_exec_requests om informatie over geblokkeerde aanvragen te vinden.

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. Bestaande aanvragen bestellen op 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