Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Geeft de tekst terug van de SQL-batch die is geïdentificeerd door de gespecificeerde sql_handle. Deze tabelwaardige functie vervangt de systeemfunctie fn_get_sql.
Syntaxis
sys.dm_exec_sql_text(sql_handle | plan_handle)
Arguments
sql_handle
Is een token dat uniek een batch identificeert die heeft uitgevoerd of momenteel uitvoert.
sql_handle is varbinair(64).
De sql_handle kan worden verkregen uit de volgende dynamische beheerobjecten:
plan_handle
Is een token dat uniek een query-uitvoeringsplan identificeert voor een batch die is uitgevoerd en waarvan het plan zich in de plancache bevindt, of momenteel uitvoert.
plan_handle is varbinair(64).
De plan_handle kan worden verkregen uit de volgende dynamische beheerobjecten:
Tabel geretourneerd
| Kolomnaam | Gegevenstype | Description |
|---|---|---|
| dbid | smallint | ID van database. Voor statische SQL in een opgeslagen procedure is de ID van de database die de opgeslagen procedure bevat. Anders nietig. |
| Object | int | ID van object. Is NULL voor ad hoc en voorbereide SQL-instructies. |
| number | smallint | Voor een genummerde opgeslagen procedure geeft deze kolom het nummer van de opgeslagen procedure terug. Voor meer informatie, zie sys.numbered_procedures (Transact-SQL). Is NULL voor ad hoc en voorbereide SQL-instructies. |
| Gecodeerde | bit | 1 = SQL-tekst is versleuteld. 0 = SQL-tekst is niet versleuteld. |
| tekst | nvarchar(max) | Tekst van de SQL-query. Is NULL voor versleutelde objecten. |
Permissions
Hiervoor is machtiging vereist VIEW SERVER STATE op de server.
Machtigingen voor SQL Server 2022 en hoger
Vereist de machtiging PRESTATIESTATUS VAN DE WEERGAVESERVER op de server.
Opmerkingen
Voor ad hoc-queries zijn de SQL-handles hashwaarden gebaseerd op de SQL-tekst die aan de server wordt gestuurd, en kunnen ze afkomstig zijn van elke database.
Voor databaseobjecten zoals opgeslagen procedures, triggers of functies worden de SQL-handles afgeleid van de database-ID, object-ID en objectnummer.
Plan handle is een hashwaarde die wordt afgeleid van het gecompileerde plan van de hele batch.
Opmerking
dbid kan niet worden bepaald uit sql_handle voor ad hoc zoekopdrachten. Om dbid voor ad hoc-queries te bepalen, gebruik plan_handle in plaats daarvan.
Voorbeelden
Eén. Conceptueel voorbeeld
Het volgende is een basisvoorbeeld om te illustreren hoe je een sql_handle direct of met CROSS APPLY kunt halen.
Creëer activiteit.
Voer de volgende T-SQL uit in een nieuw queryvenster in SQL Server Management Studio.-- Identify current spid (session_id) SELECT @@SPID; GO -- Create activity WAITFOR DELAY '00:02:00';Gebruik CROSS APPLY.
De sql_handle van sys.dm_exec_requests worden doorgegeven aan sys.dm_exec_sql_text via CROSS APPLY. Open een nieuw queryvenster en geef de spid door die in stap 1 is geïdentificeerd. In dit voorbeeld is59de spid toevallig .SELECT t.* FROM sys.dm_exec_requests AS r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t WHERE session_id = 59 -- modify this value with your actual spidGeef sql_handle direct door.
Haal de sql_handle van sys.dm_exec_requests. Geef vervolgens de sql_handle direct aan sys.dm_exec_sql_text. Open een nieuw queryvenster en geef de spid die in stap 1 is geïdentificeerd door aan sys.dm_exec_requests. In dit voorbeeld is59de spid toevallig . Geef dan de teruggegeven sql_handle als argument aan sys.dm_exec_sql_text.-- acquire sql_handle SELECT sql_handle FROM sys.dm_exec_requests WHERE session_id = 59 -- modify this value with your actual spid -- pass sql_handle to sys.dm_exec_sql_text SELECT * FROM sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000) -- modify this value with your actual sql_handle
B. Verkrijg informatie over de vijf belangrijkste zoekopdrachten op basis van gemiddelde CPU-tijd
Het volgende voorbeeld geeft de tekst van de SQL-instructie en de gemiddelde CPU-tijd voor de top vijf queries terug.
SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY total_worker_time/execution_count DESC;
C. Verskaf batch-uitvoeringsstatistieken
Het volgende voorbeeld geeft de tekst van SQL-query's die in batches worden uitgevoerd terug en geeft statistische informatie hierover.
SELECT s2.dbid,
s1.sql_handle,
(SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,
( (CASE WHEN statement_end_offset = -1
THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)
ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,
execution_count,
plan_generation_num,
last_execution_time,
total_worker_time,
last_worker_time,
min_worker_time,
max_worker_time,
total_physical_reads,
last_physical_reads,
min_physical_reads,
max_physical_reads,
total_logical_writes,
last_logical_writes,
min_logical_writes,
max_logical_writes
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
WHERE s2.objectid is null
ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;
Zie ook
Dynamische beheerweergaven en -functies (Transact-SQL)
uitvoeringsgerelateerde dynamische beheerweergaven en -functies (Transact-SQL)
sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_cursors (Transact-SQL)
sys.dm_exec_xml_handles (Transact-SQL)
sys.dm_exec_query_memory_grants (Transact-SQL)
APPLY gebruiken
sys.dm_exec_text_query_plan (Transact-SQL)