「Microsoft 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.