sys.dm_exec_sql_text (Transact-SQL)
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
指定した sql_handleによって識別される SQL バッチのテキストを返します。 このテーブル値関数は、システム関数 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 を取得できます。
返されるテーブル
列名 | データ型 | 説明 |
---|---|---|
dbid | smallint | データベースの ID。 ストアド プロシージャ内の静的 SQL の場合、ストアド プロシージャを含むデータベースの ID。 その他の場合は NULL が返されます。 |
objectid | int | オブジェクトの ID。 アドホック SQL ステートメントおよび準備された SQL ステートメントの場合は NULL になります。 |
number | smallint | 番号付きストアド プロシージャの場合、ストアド プロシージャの番号。 詳細については、「 sys.numbered_procedures (Transact-SQL)」を参照してください。 アドホック SQL ステートメントおよび準備された SQL ステートメントの場合は NULL になります。 |
encrypted | bit | 1 = SQL テキストは暗号化されています。 0 = SQL テキストは暗号化されていません。 |
text | nvarchar(max) | SQL クエリのテキスト。 暗号化されているオブジェクトの場合は NULL になります。 |
アクセス許可
サーバーに対する VIEW SERVER STATE
権限が必要です。
SQL Server 2022 以降のアクセス許可
サーバーに対する VIEW SERVER PERFORMANCE STATE 権限が必要です。
注釈
アドホック クエリの場合、SQL ハンドルは、サーバーに送信される SQL テキストに基づくハッシュ値であり、任意のデータベースから生成できます。
ストアド プロシージャ、トリガー、関数などのデータベース オブジェクトの場合、SQL ハンドルはデータベース ID、オブジェクト ID、およびオブジェクト番号から派生します。
プラン ハンドルは、バッチ全体のコンパイル済みプランから派生したハッシュ値です。
注意
アドホック クエリのsql_handleから dbid を特定することはできません。 アドホック クエリの dbid を確認するには、代わりに plan_handle を使用します。
例
A. 概念的な例
次に、sql_handleを直接渡すか、CROSS APPLYを使用して渡す方法を示す基本的な例を示します。
アクティビティを作成します。
SQL Server Management Studioの新しいクエリ ウィンドウで次の T-SQL を実行します。-- Identify current spid (session_id) SELECT @@SPID; GO -- Create activity WAITFOR DELAY '00:02:00';
CROSS APPLY の使用。
sys.dm_exec_requestsからのsql_handleは、CROSS APPLY を使用してsys.dm_exec_sql_textに渡されます。 新しいクエリ ウィンドウを開き、手順 1 で識別された spid を渡します。 この例では、spid は になります59
。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を直接渡す。
sys.dm_exec_requestsからsql_handleを取得します。 次に、 sql_handle を直接 sys.dm_exec_sql_textに渡します。 新しいクエリ ウィンドウを開き、手順 1 で識別された spid を sys.dm_exec_requestsに渡します。 この例では、spid は になります59
。 次に、返された 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. 平均 CPU 時間で上位 5 つのクエリに関する情報を取得する
次の例では、上位 5 つのクエリにかかった平均 CPU 時間と 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;
C. バッチ実行の統計情報を提供する
次の例では、バッチで実行されている 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)
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示