開いているカーソル情報の一覧を出力するSQL Server動的管理ビューレファレンス(47)

「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、開いているカーソル情報の一覧の出力について解説します。

» 2021年09月28日 05時00分 公開
[伊東敏章@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

SQL Server動的管理ビュー一覧

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で使用可能な動的管理ビューについて、動作概要や出力内容などを紹介していきます。今回は動的管理ビュー「sys.dm_exec_cursors」における、開いているカーソル情報の一覧の出力について解説します。対応バージョンは、SQL Server 2012以降です。

概要

 SQL Serverではカーソルを使用して、クエリ結果の行の繰り返し処理を行うことができます。カーソルの種類には順方向専用カーソルや静的カーソル、キーセットドリブンカーソル、動的カーソルがあり、カーソルの種類によって他のトランザクションによるデータ変更時の影響や値の取り出し方が異なります。また、カーソルの種類によっては、結果セットやキーセットなどの一時的な保持に「tempdb」が使用されるものもあります。

 「sys.dm_exec_cursors」動的管理関数を出力することで、サーバ全体で開いているカーソルの一覧情報や指定したセッションで開かれているカーソル情報を出力できます。そのため、カーソルを使用したクエリのデバッグや、カーソル使用中に発生したリソース消費の増加や処理遅延などのトラブルへの対応に役立てられます。

構文と引数

構文 sys.dm_exec_cursors(session_id)

引数名 データ型 説明
session_id int セッション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_handle」や「statement_end_offset」「sys.dm_exec_sql_text」動的管理関数から、現在要求中のステートメントを特定できる
statement_end_offset int 現在実行中のステートメントが終了する、バッチまたはストアドプロシージャの中での文字数
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 フェッチバッファーのサイズに関する情報を返す
fetch_buffer_start int 「FAST_FORWARD」「DYNAMIC」カーソルの場合
 カーソルが開いていない場合、またはカーソルが最初の行の前にある場合は「0」
 それ以外の場合は「-1」
「STATIC」カーソルと「KEYSET」カーソルの場合
 カーソルが開いていない場合は「0」
 カーソルが最後の行を超えている場合は「-1」
 それ以外の場合は配置されている行番号
ansi_position int カーソルのフェッチバッファー内の位置
worker_time bigint このカーソルを実行するワーカーによって費やされた時間(マイクロ秒)
reads bigint カーソルで実行された読み取りの数
writes bigint カーソルで実行された書き込みの数
dormant_duration bigint このカーソルの最後のクエリ(オープンまたはフェッチ)が開始されてからのミリ秒

出力例

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。