sys.dm_exec_cursors(Transact-SQL)

適用対象:SQL Server

各種データベースで開いているカーソルに関する情報を返します。

Syntax

  
dm_exec_cursors (session_id | 0 )  

引数

session_id |0
セッションの ID。 session_idが指定されている場合、この関数は指定されたセッションのカーソルに関する情報を返します。

0 を指定した場合、この関数ではすべてのセッションのすべてのカーソルに関する情報が返されます。

返されるテーブル

列名 データの種類 Description
session_id int このカーソルを保持するセッションの ID。
cursor_id int カーソル オブジェクトの ID。
名前 nvarchar(256) ユーザーによって定義されたカーソルの名前。
プロパティ nvarchar(256) カーソルのプロパティ。 次のプロパティの値が連結されて、この列の値が形成されます。
宣言インターフェイス
カーソルの種類
カーソルのコンカレンシー
カーソルのスコープ
カーソルの入れ子レベル

たとえば、この列に返される値は "TSQL |動的 |オプティミスティック |グローバル (0)"。
sql_handle varbinary(64) カーソルを宣言したバッチのテキストを処理します。
statement_start_offset int 現在実行中のバッチまたはストアド プロシージャ内で現在実行中のステートメントが開始される文字数。 sql_handlestatement_end_offset、およびsys.dm_exec_sql_text動的管理機能と共に使用して、要求に対して現在実行中のステートメントを取得できます。
statement_end_offset int 現在実行中のステートメントが終了する現在実行中のバッチまたはストアド プロシージャの文字数。 sql_handlestatement_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 このカーソルの最後のクエリ (開いているかフェッチ) が開始されてからのミリ秒。

Permissions

サーバー VIEW SERVER STATE権限が必要です。

SQL Server 2022 以降でのアクセス許可

サーバー VIEW PERFORMANCE STATE権限が必要です。

注釈

次の表に、カーソル宣言インターフェイスに関する情報を示し、プロパティ列に使用できる値を示します。

財産 Description
API データ アクセス API (ODBC、OLEDB) のいずれかを使用してカーソルが宣言されました。
Tsql カーソルは、Transact-SQL DECLARE CURSOR 構文を使用して宣言されました。

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

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

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

Concurrency Description
[読み取り専用] カーソルが読み取り専用として宣言されました。
スクロール ロック カーソルはスクロール ロックを使用します。
楽観的 カーソルはオプティミスティック コンカレンシー制御を使用します。

次の表は、カーソルスコープに関する情報を提供し、プロパティ列に使用できる値を示しています。

Scope Description
Local カーソルのスコープは、カーソルが作成されたバッチ、ストアド プロシージャ、またはトリガーに対してローカルです。
グローバル カーソルのスコープは、接続に対してグローバルです。

Examples

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)