sys.dm_exec_cursors (Transact-SQL)
適用対象: SQL Server
各種データベースで開いているカーソルに関する情報を返します。
構文
dm_exec_cursors (session_id | 0 )
引数
session_id | 0
セッションの ID。 session_idが指定されている場合、この関数は指定されたセッションのカーソルに関する情報を返します。
0 を指定した場合、この関数ではすべてのセッションのすべてのカーソルに関する情報が返されます。
返されるテーブル
列名 | データ型 | 説明 |
---|---|---|
session_id | int | このカーソルを保持するセッションの ID。 |
cursor_id | int | カーソル オブジェクトの ID。 |
name | nvarchar (256) | ユーザーによって定義されたカーソルの名前。 |
properties | nvarchar (256) | カーソルのプロパティ。 次のプロパティの値が連結されて、この列の値が形成されます。 宣言インターフェイス カーソルの種類 カーソルのコンカレンシー カーソルのスコープ カーソルの入れ子レベル たとえば、この列に返される値は "TSQL |動的 |オプティミスティック |グローバル (0)"。 |
sql_handle | varbinary(64) | カーソルを宣言したバッチのテキストを処理します。 |
statement_start_offset | int | 現在実行中のバッチまたはストアド プロシージャ内で現在実行中のステートメントが開始される文字数。 sql_handle、statement_end_offset、およびsys.dm_exec_sql_text動的管理機能と共に使用して、要求に対して現在実行中のステートメントを取得できます。 |
statement_end_offset | int | 現在実行中のステートメントが終了する現在実行中のバッチまたはストアド プロシージャの文字数。 sql_handle、statement_start_offset、およびsys.dm_exec_sql_text動的管理機能と共に使用して、要求に対して現在実行中のステートメントを取得できます。 |
plan_generation_num | bigint | 再コンパイル後にプランのインスタンスを区別するために使用できるシーケンス番号。 |
creation_time | datetime | カーソルが作成されたタイムスタンプ。 |
is_open | bit | カーソルが開いているかどうかを示します。 |
is_async_population | bit | バックグラウンド スレッドが KEYSET カーソルまたは STATIC カーソルを非同期的に設定するかどうかを指定します。 |
is_close_on_commit | bit | カーソルがCURSOR_CLOSE_ON_COMMITを使用して宣言されたかどうかを指定します。 1 = カーソルはトランザクションが終了したときに閉じられます。 |
fetch_status | int | カーソルの最後のフェッチ状態を返します。 これは、最後に返された@@FETCH_STATUS値です。 |
fetch_buffer_size | int | フェッチ バッファーのサイズに関する情報。 1 = Transact-SQL カーソル。 これは、API カーソルの値を大きく設定できます。 |
fetch_buffer_start | int | FAST_FORWARDおよび DYNAMIC カーソルの場合、カーソルが開かっていない場合、またはカーソルが最初の行の前に配置されている場合は、0 が返されます。 それ以外のときは -1 が返されます。 STATIC カーソルと KEYSET カーソルの場合、カーソルが開かっていない場合は 0、最後の行を超えてカーソルが配置されている場合は -1 が返されます。 それ以外の場合は、配置先の行番号を返します。 |
ansi_position | int | フェッチ バッファー内のカーソル位置。 |
worker_time | bigint | このカーソルを実行するワーカーが費やした時間 (マイクロ秒単位)。 |
読み取り | bigint | カーソルによって実行された読み取りの数。 |
書き込みます | bigint | カーソルによって実行された書き込みの数。 |
dormant_duration | bigint | このカーソルの最後のクエリ (開いているかフェッチ) が開始されてからのミリ秒。 |
アクセス許可
サーバーに対する VIEW SERVER STATE 権限が必要です。
SQL Server 2022 以降でのアクセス許可
サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。
解説
次の表に、カーソル宣言インターフェイスに関する情報を示し、プロパティ列に使用できる値を示します。
プロパティ | 説明 |
---|---|
API | データ アクセス API (ODBC、OLEDB) のいずれかを使用してカーソルが宣言されました。 |
TSQL | カーソルは、Transact-SQL DECLARE CURSOR 構文を使用して宣言されました。 |
次の表は、カーソルの種類に関する説明と、プロパティ列に返される値です。
型 | 説明 |
---|---|
Keyset | カーソルはキーセットとして宣言されています。 |
動的 | カーソルが動的として宣言されました。 |
スナップショット | カーソルがスナップショットまたは静的として宣言されました。 |
Fast_Forward | カーソルは高速順方向として宣言されています。 |
次の表は、カーソルのコンカレンシーに関する説明と、プロパティ列に返される値です。
コンカレンシー | 説明 |
---|---|
[読み取り専用] | カーソルが読み取り専用として宣言されました。 |
スクロール ロック | カーソルはスクロール ロックを使用します。 |
Optimistic (オプティミスティック) | カーソルはオプティミスティック コンカレンシー制御を使用します。 |
次の表は、カーソルスコープに関する情報を提供し、プロパティ列に使用できる値を示しています。
Scope | 説明 |
---|---|
ローカル | カーソルのスコープは、カーソルが作成されたバッチ、ストアド プロシージャ、またはトリガーに対してローカルです。 |
グローバル | カーソルのスコープは、接続に対してグローバルです。 |
例
A. 古いカーソルの検出
次の使用例は、指定した 36 時間を超えるサーバー上で開かれているカーソルに関する情報を返します。
SELECT creation_time, cursor_id, name, c.session_id, login_name
FROM sys.dm_exec_cursors(0) AS c
JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_id
WHERE DATEDIFF(hh, c.creation_time, GETDATE()) > 36;
GO
参照
動的管理ビューと動的管理関数 (Transact-SQL)
実行関連の動的管理ビューと関数 (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)