次の方法で共有


sys.dm_exec_cursors (Transact-SQL)

適用対象: SQL サーバー

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

構文

  
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_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 このカーソルの最後のクエリ (開いているかフェッチ) が開始されてからのミリ秒。

アクセス許可

サーバーに対する 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)