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 | Dynamic | Optimistic | Global (0)" となる場合があります。
sql_handle varbinary(64) カーソルを宣言したバッチのテキストを処理します。
statement_start_offset int 現在実行中のバッチまたはストアド プロシージャに含まれる、現在実行中のステートメントが開始されるまでの文字数。 sql_handlestatement_end_offsetsys.dm_exec_sql_text動的管理機能と共に使用して、要求に対して現在実行中のステートメントを取得できます。
statement_end_offset int 現在実行中のバッチまたはストアド プロシージャの現在実行中のステートメントが終了する文字数。 sql_handlestatement_start_offsetsys.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 権限が必要です。

注釈

次の表は、カーソル宣言インターフェイスに関する情報を提供し、properties 列に使用できる値を示しています。

プロパティ 説明
API カーソルは、データ アクセス API (ODBC、OLEDB) のいずれかを使用して宣言されました。
TSQL カーソルは、Transact-SQL DECLARE CURSOR 構文を使用して宣言されました。

次の表は、カーソルの種類に関する説明と、プロパティ列に返される値です。

Type 説明
Keyset カーソルはキーセットとして宣言されています。
動的 カーソルが動的として宣言されました。
スナップショット カーソルがスナップショットまたは静的として宣言されました。
Fast_Forward カーソルは高速順方向として宣言されています。

次の表は、カーソルのコンカレンシーに関する説明と、プロパティ列に返される値です。

コンカレンシー 説明
[読み取り専用] カーソルが読み取り専用として宣言されました。
Scroll Locks カーソルはスクロール ロックを使用します。
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)