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

イベントの期間 (ミリ秒)。

注意

SQL Server 2005 以降では、サーバーはマイクロ秒 (100 万分の 1 (10-6) 秒) 単位でのイベント期間、およびイベントにより使用されるミリ秒 (1000 分の 1 (10-3) 秒) 単位での CPU 時間をレポートします。 SQL Server 2005 以降では、SQL Server Profiler のグラフィカル ユーザー インターフェイスに、既定ではミリ秒単位で Duration 列が表示されますが、トレースがファイルまたはデータベース テーブルに保存されると、Duration 列の値はマイクロ秒単位で記述されます。

EndTime

15

イベントが終了した時刻。 SQL:BatchStartingSP: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

イベントに関係するオブジェクトの種類を表す値。 この値は sysobjectstype 列に対応します。

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 ストアド プロシージャを使用してトレースを作成および実行する方法について説明します。

Transact-SQL ストアド プロシージャを使用したトレースの作成と実行

SQL Server データベース エンジンのインスタンスに対するストアド プロシージャを使用して手動トレースを作成する方法について説明します。

ストアド プロシージャを使用した手動トレースの作成

トレース結果が書き込まれるファイルにトレース結果を保存する方法について説明します。

トレース結果のファイルへの保存

temp ディレクトリの空き領域の使用によってトレース データへのアクセスを向上させる方法について説明します。

トレース データへのアクセスを向上させる

ストアド プロシージャを使用してトレースを作成する方法について説明します。

トレースの作成 (Transact-SQL)

ストアド プロシージャを使用して、トレース中のイベントに関して必要な情報のみを取得するフィルターを作成する方法について説明します。

トレース フィルターの設定 (Transact-SQL)

ストアド プロシージャを使用して既存のトレースを変更する方法について説明します。

既存のトレースの変更 (Transact-SQL)

組み込み関数を使用して、保存されているトレースを表示する方法について説明します。

保存されているトレースの表示 (Transact-SQL)

組み込み関数を使用してトレース フィルター情報を表示する方法について説明します。

フィルター情報の表示 (Transact-SQL)

ストアド プロシージャを使用してトレースを削除する方法について説明します。

トレースの削除 (Transact-SQL)

トレースによって発生するパフォーマンス コストを最小限に抑える方法について説明します。

SQL トレースの最適化

トレース中に発生するオーバーヘッドを最小限にするためにトレースをフィルター処理する方法について説明します。

トレースへのフィルターの適用

トレースで収集されるデータ量を最小限にする方法について説明します。

トレース ファイルとテーブル サイズの制限

Microsoft SQL Server でトレースのスケジュールを設定するための 2 つの方法について説明します。

トレースのスケジュール設定

関連項目

その他の技術情報

SQL Server プロファイラーのテンプレートと権限

SQL Server 管理オブジェクト (SMO) プログラミング ガイド