Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Возвращает текст пакета SQL, который определяется указанным sql_handle. Эта табличное значение функция заменяет системную функцию fn_get_sql.
Синтаксис
sys.dm_exec_sql_text(sql_handle | plan_handle)
Аргументы
sql_handle
Маркер, который однозначно определяет пакет, который выполнил или выполняется в данный момент.
sql_handle является varbinary(64).
Sql_handle можно получить из следующих динамических объектов управления:
plan_handle
Это токен, который уникально идентифицирует план выполнения запросов для выполненного пакета, план которого хранится в кэше планов или пребывает на этапе выполнения.
plan_handle — varbinary(64).
plan_handle можно получить из следующих объектов динамического управления:
Возвращаемая таблица
| Имя столбца | Тип данных | Description |
|---|---|---|
| dbid | smallint | Идентификатор базы данных. Для статического SQL в хранимой процедуре идентификатор базы данных, содержащей хранимую процедуру. В противном случае - значение NULL. |
| objectid | int | Идентификатор объекта. Имеет значение NULL для нерегламентированных и подготовленных инструкций SQL. |
| number | smallint | Для пронумерованной хранимой процедуры этот столбец возвращает ее номер. Дополнительные сведения см. в разделе sys.numbered_procedures (Transact-SQL). Имеет значение NULL для нерегламентированных и подготовленных инструкций SQL. |
| encrypted | bit | 1 = текст SQL зашифрован. 0 = текст SQL не зашифрован. |
| text | nvarchar(max) | Текст SQL-запроса. Имеет значение NULL для зашифрованных объектов. |
Разрешения
Необходимо разрешение VIEW SERVER STATE на сервере.
Разрешения для SQL Server 2022 и более поздних версий
Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.
Замечания
Для нерегламентированных запросов дескриптор SQL — это хэш-значения на основе текста SQL, отправляемого на сервер, и могут исходить из любой базы данных.
Для таких объектов баз данных, как хранимые процедуры, триггеры или функции, дескрипторы SQL создаются на основе идентификатора базы данных, идентификатора объекта, а также номера объекта.
Дескриптор плана является хэш-значением, производным от скомпилированного плана всего пакета.
Примечание.
dbid нельзя определить из sql_handle для нерегламентированных запросов. Чтобы определить dbid для нерегламентированных запросов, используйте вместо этого plan_handle .
Примеры
А. Концептуальный пример
Ниже приведен базовый пример для иллюстрации передачи sql_handle напрямую или с помощью CROSS APPLY.
Создание действия.
Выполните следующий T-SQL в новом окне запроса в SQL Server Management Studio.-- Identify current spid (session_id) SELECT @@SPID; GO -- Create activity WAITFOR DELAY '00:02:00';Использование CROSS APPLY.
Sql_handle из sys.dm_exec_requests будут переданы sys.dm_exec_sql_text с помощью CROSS APPLY. Откройте новое окно запроса и передайте spid, определенный на шаге 1. В этом примере выполняется59spid.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 spidПередача sql_handle напрямую.
Получите sql_handle из sys.dm_exec_requests. Затем передайте sql_handle непосредственно в sys.dm_exec_sql_text. Откройте новое окно запроса и передайте spid, определенный на шаге 1, в sys.dm_exec_requests. В этом примере выполняется59spid. Затем передайте возвращенную sql_handle в качестве аргумента в 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. Получение сведений о пяти первых запросах по среднему времени ЦП
Следующий пример возвращает текст инструкции SQL и среднее время ЦП для пяти первых запросов.
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;
В. Предоставление статистики выполнения пакетной службы
Следующий пример возвращает текст запросов SQL, выполняемых в пакетах, и статистические сведения о них.
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;
См. также
Динамические административные представления и функции (Transact-SQL)
Связанные с выполнением динамические административные представления и функции (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
sys.dm_exec_text_query_plan (Transact-SQL)