Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Zwraca tekst partii SQL zidentyfikowanej przez określony sql_handle. Ta funkcja tabelowa zastępuje funkcję systemową fn_get_sql.
Składnia
sys.dm_exec_sql_text(sql_handle | plan_handle)
Arguments
sql_handle
To token, który jednoznacznie identyfikuje partię, która wykonała lub jest obecnie wykonywana.
sql_handle jest warbinary(64).
sql_handle można uzyskać z następujących dynamicznych obiektów zarządzania:
plan_handle
Jest tokenem, który jednoznacznie identyfikuje plan wykonania zapytań dla partii, która została wykonana, a jej plan znajduje się w pamięci podręcznej planu lub jest obecnie wykonywana.
plan_handle jest varbinary(64).
Plan_handle można uzyskać z następujących dynamicznych obiektów zarządzania:
Zwracana tabela
| Nazwa kolumny | Typ danych | Description |
|---|---|---|
| dbid | smallint | ID bazy danych. Dla statycznego SQL w procedurze przechowywanej, identyfikator bazy danych zawierającej procedurę przechowywaną. Wartość null w przeciwnym razie. |
| objectid (identyfikator obiektu) | int | Identyfikator obiektu. Czy jest NULL dla ad hoc i przygotowanych instrukcji SQL. |
| number | smallint | Dla numerowanej procedury przechowywanej, ta kolumna zwraca numer zapisanej procedury. Więcej informacji można znaleźć w sys.numbered_procedures (Transact-SQL). Czy jest NULL dla ad hoc i przygotowanych instrukcji SQL. |
| Szyfrowane | bit | 1 = tekst SQL jest szyfrowany. 0 = tekst SQL nie jest szyfrowany. |
| tekst | nvarchar(max) | Tekst zapytania SQL. Czy jest NULL dla zaszyfrowanych obiektów. |
Permissions
Wymaga VIEW SERVER STATE uprawnień na serwerze.
Uprawnienia dla programu SQL Server 2022 i nowszych
Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI SERWERA na serwerze.
Uwagi
W przypadku zapytań ad hoc uchwyty SQL to wartości skrótu oparte na tekstach SQL przesyłanych na serwer i mogą pochodzić z dowolnej bazy danych.
Dla obiektów bazy danych, takich jak procedury przechowywane, wyzwalacze lub funkcje, uchwyty SQL są wyprowadzane z identyfikatora bazy danych, identyfikatora obiektu i numeru obiektu.
Uchwyt planu to wartość skrótu pochodząca z skompilowanego planu całej partii.
Uwaga / Notatka
Dbid nie może być określony na podstawie sql_handle dla zapytań ad hoc. Aby określić dbid dla zapytań ad hoc, użyj plan_handle zamiast tego.
Przykłady
A. Przykład koncepcyjny
Poniżej znajduje się podstawowy przykład ilustrujący przekazanie sql_handle bezpośrednio lub za pomocą CROSS APPLY.
Twórz aktywność.
Wykonaj następujące T-SQL w nowym oknie zapytań w SQL Server Management Studio.-- Identify current spid (session_id) SELECT @@SPID; GO -- Create activity WAITFOR DELAY '00:02:00';Używam CROSS APPLY.
sql_handle z sys.dm_exec_requests zostanie przekazany do sys.dm_exec_sql_text za pomocą CROSS APPLY. Otwórz nowe okno zapytania i przekaż spid zidentyfikowany w kroku 1. W tym przykładzie spid jest .59SELECT 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 spidPrzekazując sql_handle bezpośrednio.
Zdobądź sql_handle od sys.dm_exec_requests. Następnie przekaż sql_handle bezpośrednio do sys.dm_exec_sql_text. Otwórz nowe okno zapytania i przekaż spid zidentyfikowany w kroku 1 do sys.dm_exec_requests. W tym przykładzie spid jest .59Następnie przekazać zwrócone sql_handle jako argument do 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. Uzyskaj informacje o pięciu najczęściej zapytanych według średniego czasu CPU
Poniższy przykład zwraca tekst instrukcji SQL oraz średni czas CPU dla pięciu najczęstszych zapytań.
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. Dostarcz statystyki wykonania wsadowego
Poniższy przykład zwraca tekst zapytań SQL wykonywanych w partiach i dostarcza informacji statystycznych na ich temat.
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;
Zobacz także
Dynamiczne widoki zarządzania i funkcje (Transact-SQL)
Dynamiczne widoki zarządzania i funkcje związane z wykonywaniem (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)
Używając APPLY
sys.dm_exec_text_query_plan (Transact-SQL)