SQL トレース
SQL トレースでは、トレース定義に一覧表示されているイベント クラスのインスタンスであるイベントが収集されます。 このようなイベントは、フィルターによってトレースから除外したり、対象のキューに登録したりすることができます。 イベントの対象には、ファイルまたは SQL Server 管理オブジェクト (SMO) を指定できます。SMO では、SQL Server を管理するアプリケーションでトレース情報を使用できます。
重要 |
---|
この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。代わりに拡張イベントを使用します。 |
SQL トレースの利点
Microsoft SQL Server には、SQL Server データベース エンジンのインスタンスでトレースを作成するための Transact-SQL システム ストアド プロシージャが用意されています。 これらのシステム ストアド プロシージャを使用して、SQL Server Profiler からではなく、ユーザー独自のアプリケーションからトレースを手動で作成することもできます。 これにより、企業のニーズに合わせたカスタム アプリケーションを作成できます。
SQL トレース アーキテクチャ
イベント ソースには、Transact-SQL バッチなどのトレース イベントやデッドロックなどの SQL Server イベントを生成する任意のソースを指定できます。 イベントの詳細については、「SQL Server イベント クラスの参照」を参照してください。 イベントの発生後、イベント クラスがトレース定義に含まれている場合は、トレースによってイベント情報が収集されます。 トレース定義に含まれているイベント クラスに対してフィルターが定義されている場合は、フィルターが適用され、トレース イベント情報がキューに渡されます。 キューに登録されたトレース情報は、ファイルに書き込まれるか、または SQL Server Profiler などのアプリケーションで SMO によって使用されます。 次の図は、トレース中に SQL トレースによってどのようにイベントが収集されるかを示しています。
SQL トレースの用語
次の用語は SQL トレースの主要な概念を示したものです。
イベント
Microsoft SQL Server データベース エンジン のインスタンス内での操作により発生します。データ列
イベントの属性。イベント クラス
トレースできるイベントの種類。 イベント クラスには、イベントから報告できるすべてのデータ列が含まれています。イベント カテゴリ
関連するイベント クラスのグループ。トレース (名詞)
データベース エンジンによって返されるイベントやデータのコレクション。トレースする (動詞)
SQL Server のインスタンス内のイベントを収集および監視すること。トレース定義
イベント クラス、データ列、およびトレース中に収集されるイベントの種類を識別するフィルターのコレクション。フィルター
トレースで収集されるイベントを限定する条件。トレース ファイル
トレースの保存時に作成されるファイル。テンプレート
SQL Server Profilerでは、トレースで収集されるイベント クラスやデータ列を定義するファイル。トレース テーブル
SQL Server Profiler で、トレースがテーブルに保存されるときに作成されるテーブル。
データ列による返されたイベントの説明
SQL トレースでは、トレース出力のデータ列を使用して、トレースの実行時に返されたイベントが説明されます。 次の表に、SQL Server Profiler のデータ列を示します。これらのデータ列は、SQL トレースによって使用されるデータ列と同一のデータ列です。また、この表では、既定で選択されているデータ列を示しています。
データ列 |
列番号 |
説明 |
||
---|---|---|---|---|
ApplicationName 1 |
10 |
SQL Server のインスタンスへの接続を作成したクライアント アプリケーションの名前。 この列には、プログラム名ではなくアプリケーションによって渡された値が格納されます。 |
||
BigintData1 |
52 |
トレースで指定されているイベント クラスに依存する値 (bigint データ型)。 |
||
BigintData2 |
53 |
トレースで指定されているイベント クラスに依存する値 (bigint データ型)。 |
||
Binary Data |
2 |
トレースにキャプチャされるイベント クラスに依存するバイナリ値。 |
||
ClientProcessID 1 |
9 |
クライアント アプリケーションが実行されているプロセスに対し、ホスト コンピューターによって割り当てられた ID。 クライアントでクライアント プロセス ID が指定されると、このデータ列が作成されます。 |
||
ColumnPermissions |
44 |
列権限が設定されていたかどうかを示します。 ステートメントのテキストを解析して、どの権限がどの列に適用されていたかを判断できます。 |
||
CPU |
18 |
イベントで使用された CPU 時間 (ミリ秒)。 |
||
Database ID 1 |
3 |
USE database_name ステートメントで指定されたデータベースの ID、または特定のインスタンスについて USE database_name ステートメントが実行されていない場合は既定のデータベースの ID となります。 SQL Server Profiler では、Server Name データ列がトレースにキャプチャされ、そのサーバーが利用可能な場合、データベースの名前が表示されます。 データベースに対応する値は、DB_ID 関数を使用して特定します。 |
||
DatabaseName |
35 |
ユーザーのステートメントが実行されているデータベースの名前。 |
||
DBUserName 1 |
40 |
クライアントの SQL Server ユーザー名。 |
||
Duration |
13 |
イベントの期間 (ミリ秒)。
|
||
EndTime |
15 |
イベントが終了した時刻。 SQL:BatchStarting や SP:Starting などのイベントの開始を示すイベント クラスには、このデータ列は作成されません。 |
||
Error |
31 |
特定のイベントのエラー番号。 これは多くの場合、sysmessages に格納されたエラー番号です。 |
||
EventClass 1 |
27 |
キャプチャされるイベント クラスの種類。 |
||
EventSequence |
51 |
このイベントのシーケンス番号。 |
||
EventSubClass 1 |
21 |
イベント サブクラスの種類。各イベント クラスに関するより詳細な情報を提供します。 たとえば、Execution Warning イベント クラスのイベント サブクラス値は、以下のような実行の警告の種類を表します。 1 = クエリの待機時間。 クエリを実行するには、メモリなど、そのためのリソースが確保されるまで待機しなければなりません。 2 = クエリのタイムアウト。 クエリの実行に必要なリソースが確保されるのを待機していて時間切れになりました。 このデータ列は、すべてのイベント クラスについてデータが作成されるわけではありません。 |
||
GUID |
54 |
トレースで指定されているイベント クラスに依存する GUID 値。 |
||
FileName |
36 |
変更されるファイルの論理名。 |
||
Handle |
33 |
サーバーとの間で実行を調整するときに ODBC、OLE DB、または DB-Library によって使用される整数。 |
||
HostName 1 |
8 |
クライアントが実行しているコンピューターの名前。 このデータ列には、クライアントがホスト名を指定している場合にデータが格納されます。 ホスト名を指定するには、HOST_NAME 関数を使用します。 |
||
IndexID |
24 |
イベントの影響を受けるオブジェクトに付けられたインデックス用の ID。 オブジェクトのインデックス ID を決定するには、sysindexes システム テーブルの indid 列を使用します。 |
||
IntegerData |
25 |
トレースにキャプチャされるイベント クラスに依存する整数値。 |
||
IntegerData2 |
55 |
トレースにキャプチャされるイベント クラスに依存する整数値。 |
||
IsSystem |
60 |
システム プロセスまたはユーザー プロセスのどちらでイベントが発生したのかを示します。 1 = システム 0 = ユーザー |
||
LineNumber |
5 |
エラーを含む行の番号が格納されます。 SP:StmtStarting のように Transact-SQL ステートメントを含むイベントの場合は、LineNumber にはストアド プロシージャまたはバッチ内のステートメントの行番号が含まれます。 |
||
LinkedServerName |
45 |
リンク サーバーの名前。 |
||
LoginName |
11 |
ユーザーのログイン名 (SQL Server セキュリティ ログインまたは DOMAIN\Username の形式の Windows ログイン資格情報)。 |
||
LoginSid 1 |
41 |
ログイン ユーザーのセキュリティ ID (SID)。 この情報は、master データベースの sys.server_principals ビューで参照できます。 サーバーへの各ログインには一意の ID が付けられています。 |
||
MethodName |
47 |
OLEDB メソッドの名前。 |
||
Mode |
32 |
各種のイベントで要求している状態、または受け取った状態を説明するときに使用される整数。 |
||
NestLevel |
29 |
@@NESTLEVEL から返されるデータを表す整数。 |
||
NTDomainName 1 |
7 |
ユーザーが所属する Microsoft Windows ドメイン。 |
||
NTUserName 1 |
6 |
Windows のユーザー名。 |
||
ObjectID |
22 |
オブジェクトに対してシステムが割り当てた ID。 |
||
ObjectID2 |
56 |
関連するオブジェクトまたはエンティティの ID (使用可能な場合)。 |
||
ObjectName |
34 |
参照されているオブジェクトの名前。 |
||
ObjectType 2 |
28 |
イベントに関係するオブジェクトの種類を表す値。 この値は sysobjects の type 列に対応します。 |
||
Offset |
61 |
ストアド プロシージャまたはバッチ内のステートメントの開始オフセット。 |
||
OwnerID |
58 |
ロック イベントの場合のみ。 ロックを所有するオブジェクトの種類。 |
||
OwnerName |
37 |
オブジェクト所有者のデータベース ユーザー名。 |
||
ParentName |
59 |
オブジェクトが存在するスキーマ名。 |
||
Permissions |
19 |
チェックされた権限の種類を表す整数値。 値は以下のとおりです。 1 = SELECT ALL 2 = UPDATE ALL 4 = REFERENCES ALL 8 = INSERT 16 = DELETE 32 = EXECUTE (プロシージャのみ) 4096 = SELECT ANY (1 列以上) 8192 = UPDATE ANY 16384 = REFERENCES ANY |
||
ProviderName |
46 |
OLEDB プロバイダーの名前。 |
||
Reads |
16 |
論理ディスク上の読み取り操作の回数。この操作は、イベントの代わりにサーバーによって実行されます。 これらの読み取り操作には、ステートメントの実行中に行われるテーブルやバッファーからのすべての読み取り操作が含まれます。 |
||
RequestID |
49 |
ステートメントを含んでいる要求の ID。 |
||
RoleName |
38 |
有効になっているアプリケーション ロールの名前。 |
||
RowCounts |
48 |
バッチ内の行数。 |
||
ServerName 1 |
26 |
トレースしている SQL Server インスタンスの名前。 |
||
SessionLoginName |
64 |
セッションを開始したユーザーのログイン名。 たとえば、SQL Server に Login1 を使用して接続し、Login2 としてステートメントを実行した場合、SessionLoginName には Login1 が表示され、LoginName には Login2 が表示されます。 このデータ列には、SQL Server ログインと Windows ログインの両方が表示されます。 |
||
Severity |
20 |
例外イベントの重大度レベル。 |
||
SourceDatabaseID |
62 |
オブジェクトのソースが存在するデータベースの ID。 |
||
SPID |
12 |
SQL Server によって割り当てられているサーバー プロセス ID (SPID)。この ID はクライアントに関連付けられています。 |
||
SqlHandle |
63 |
アドホック クエリのテキストまたはデータベースと SQL オブジェクトのオブジェクト ID に基づく 64 ビット ハッシュ。 この値を sys.dm_exec_sql_text() に渡して、関連する SQL テキストを取得できます。 |
||
StartTime 1 |
14 |
イベントの開始時刻 (取得できた場合)。 |
||
State |
30 |
エラー状態コード。 |
||
Success |
23 |
イベントが正常に終了したかどうかを表します。 値は次のとおりです。 1 = 成功 0 = 失敗 たとえば、1 は、権限チェックの成功を表し、0 は失敗を表します。 |
||
TargetLoginName |
42 |
ログインを対象とする操作 (新規ログインの追加など) の場合の対象ログインの名前。 |
||
TargetLoginSid |
43 |
ログインを対象とする操作 (新規ログインの追加など) の場合の対象ログインの SID。 |
||
TargetUserName |
39 |
データベース ユーザーを対象とした操作 (ユーザーへの権限の許可など) を行う場合の対象となるユーザーの名前。 |
||
TextData |
1 |
トレースにキャプチャされるイベント クラスに依存するテキスト値。 ただし、パラメーター化クエリをトレースする場合は、変数は TextData 列のデータ値と共には表示されません。 |
||
Transaction ID |
4 |
トランザクションに対してシステムが割り当てた ID。 |
||
Type |
57 |
トレースにキャプチャされるイベント クラスに依存する整数値。 |
||
Writes |
17 |
イベントの代わりにサーバーによって実行される物理ディスクの書き込み操作回数。 |
||
XactSequence |
50 |
現在のトランザクションを説明するトークン。 |
1 これらのデータ列は、既定ですべてのイベントについて作成されます。
2 ObjectType データ列の詳細については、「ObjectType トレース イベント列」を参照してください。
SQL トレースのタスク
タスクの説明 |
トピック |
---|---|
Transact-SQL ストアド プロシージャを使用してトレースを作成および実行する方法について説明します。 |
|
SQL Server データベース エンジンのインスタンスに対するストアド プロシージャを使用して手動トレースを作成する方法について説明します。 |
|
トレース結果が書き込まれるファイルにトレース結果を保存する方法について説明します。 |
|
temp ディレクトリの空き領域の使用によってトレース データへのアクセスを向上させる方法について説明します。 |
|
ストアド プロシージャを使用してトレースを作成する方法について説明します。 |
|
ストアド プロシージャを使用して、トレース中のイベントに関して必要な情報のみを取得するフィルターを作成する方法について説明します。 |
|
ストアド プロシージャを使用して既存のトレースを変更する方法について説明します。 |
|
組み込み関数を使用して、保存されているトレースを表示する方法について説明します。 |
|
組み込み関数を使用してトレース フィルター情報を表示する方法について説明します。 |
|
ストアド プロシージャを使用してトレースを削除する方法について説明します。 |
|
トレースによって発生するパフォーマンス コストを最小限に抑える方法について説明します。 |
|
トレース中に発生するオーバーヘッドを最小限にするためにトレースをフィルター処理する方法について説明します。 |
|
トレースで収集されるデータ量を最小限にする方法について説明します。 |
|
Microsoft SQL Server でトレースのスケジュールを設定するための 2 つの方法について説明します。 |