トレース フラグ (Transact-SQL)

トレース フラグは、サーバー固有の特性を設定したり、特定の動作を切り替えるときに使用します。たとえば、SQL Server インスタンスの起動時にトレース フラグ 3205 が設定されている場合、テープ ドライバのハードウェア圧縮が無効になります。トレース フラグは、パフォーマンスの問題を診断したり、ストアド プロシージャや複雑なシステムをデバッグするときによく使用されます。

次の表は、SQL Server で使用できるトレース フラグの一覧とその説明です。

注意注意

トレース フラグの動作は、今後の SQL Server のリリースではサポートされない可能性もあります。

トレース フラグ

説明

260

拡張ストアド プロシージャのダイナミックリンク ライブラリ (DLL) に関するバージョン情報を出力します。__GetXpVersion() の詳細については、「拡張ストアド プロシージャの作成」を参照してください。

スコープ : グローバルまたはセッション

1204

デッドロックに関係しているロックのリソースと種類、および影響を受けている現在のコマンドを返します。

スコープ : グローバルのみ

1211

メモリの負荷またはロック数に基づいて、ロックのエスカレーションを無効にします。SQL Server データベース エンジンにおいて、行ロックまたはページ ロックはテーブル ロックにエスカレートされません。

トレース フラグを使用すると、過剰な数のロックが生成されることがあり、これが原因でデータベース エンジンのパフォーマンスが悪化したり、メモリ不足によって 1204 エラー (ロック リソース割り当て不能) が発生する可能性があります。詳細については、「ロックのエスカレーション (データベース エンジン)」を参照してください。

トレース フラグ 1211 と 1224 の両方を設定した場合、1224 よりも 1211 が優先されます。ただし、トレース フラグ 1211 では、メモリに負荷がかかっていたとしてもすべての場合のエスカレーションが無効になるわけではないので、1224 の使用をお勧めします。1224 を使用すると、多数のロックが使用中でも "ロック不足" エラーを回避することができます。

スコープ : グローバルまたはセッション

1222

デッドロックに関係しているロックのリソースと種類、および影響を受けている現在のコマンドを、どの XSD スキーマにも準拠しない XML 形式で返します。

スコープ :グローバルのみ

1224

ロック数に基づいてロックのエスカレーションを無効にします。ただし、メモリに負荷がかかっていてもロックのエスカレーションは有効にできます。データベース エンジンでは、ロック オブジェクトで使用されるメモリ量が次のいずれかの条件を超えた場合に、行ロックまたはページ ロックがテーブル ロック (またはパーティション ロック) にエスカレートされます。

  • データベース エンジンで使用されるメモリの 40% (AWE (Address Windowing Extension) を使用するメモリ割り当てを除く)。これは、sp_configurelocks パラメータが 0 に設定されている場合にのみ適用されます。

  • sp_configurelocks パラメータを使用して構成されるロック メモリの 40%。詳細については、「サーバー構成オプションの設定」を参照してください。

トレース フラグ 1211 と 1224 の両方を設定した場合、1224 よりも 1211 が優先されます。ただし、トレース フラグ 1211 では、メモリに負荷がかかっていたとしてもすべての場合のエスカレーションが無効になるわけではないので、1224 の使用をお勧めします。1224 を使用すると、多数のロックが使用中でも "ロック不足" エラーを回避することができます。

注意注意
テーブル レベルまたは HoBT レベルの粒度へのロックのエスカレーションは、ALTER TABLE ステートメントの LOCK_ESCALATION オプションで制御することもできます。

スコープ : グローバルまたはセッション

2528

DBCC CHECKDB、DBCC CHECKFILEGROUP、および DBCC CHECKTABLE によるオブジェクトの並列検査を無効にします。既定では、並列処理の次数はクエリ プロセッサによって自動的に決定されます。並列処理の最大限度は並列クエリと同様に構成します。詳細については、「max degree of parallelism オプション」を参照してください。

並列 DBCC は、通常、有効のままにします。DBCC CHECKDB では、検査対象のテーブルまたはテーブルの集合ごとに、クエリ プロセッサによって並列処理が再計算され自動的に調節されます。場合によっては、サーバーがほぼアイドル状態になっているときに検査が開始されることがあります。検査が完了する前に負荷が増加することがわかっている場合、管理者は並列処理を手動で低くするか無効にできます。

DBCC の並列チェックを無効にすると、DBCC の完了に時間がかかる可能性があります。また、TABLOCK 機能を有効にし、かつ、並列処理をオフにして DBCC を実行した場合、テーブルのロック時間が長くなる可能性があります。

スコープ : グローバルまたはセッション

3205

既定では、テープ ドライブでハードウェア圧縮がサポートされている場合、DUMP または BACKUP ステートメントではハードウェア圧縮が行われます。このトレース フラグを使用すると、テープ デバイスのハードウェア圧縮を無効にできます。この機能は、圧縮がサポートされていないサイトやテープ ドライブとの間でテープを交換する場合に便利です。

スコープ : グローバルまたはセッション

3226

既定では、バックアップ操作が成功するたびに、SQL Server エラー ログおよびシステム イベント ログにエントリが 1 つ追加されます。頻度の高いログ バックアップを作成すると、これらの成功メッセージがすぐに蓄積され、他のメッセージを探すのが困難になるほどエラー ログが大きくなることがあります。

このトレース フラグを使用すると、これらのログ エントリを除外できます。この機能は、頻度の高いログ バックアップを実行している場合やスクリプトがこれらのエントリに依存していない場合に役立ちます。

3608

SQL Server で、master データベース以外のすべてのデータベースを自動的に開始および復旧しないようにします。データベースはアクセス時に開始および復旧されます。スナップショット分離や READ COMMITTED スナップショットなど、一部の機能を使用できない場合があります。システム データベースの移動ユーザー データベースの移動に使用してください。通常の運用中は使用しないでください。

3625

エラー メッセージで返される情報の量を制限します。詳細については、「メタデータ表示の構成」を参照してください。

スコープ : グローバルのみ

4616

アプリケーション ロールに対して、サーバー レベルのメタデータを参照可能にします。SQL Server では、アプリケーション ロールはサーバーレベルのプリンシパルに関連付けられていないため、所有するデータベース外のメタデータにはアクセスできません。これは、以前のバージョンの SQL Server の動作から変更されています。このグローバル フラグを設定すると、新しい制限は無効になり、アプリケーション ロールはサーバーレベルのメタデータにアクセスできるようになります。

スコープ : グローバルのみ

6527

CLR 統合でメモリ不足例外が最初に発生した場合のメモリ ダンプの生成を無効にします。既定では、SQL Server では CLR でメモリ不足例外が最初に発生した場合、小さいメモリ ダンプが生成されます。トレース フラグの動作は次のとおりです。

  • スタートアップ トレース フラグとして使用される場合、メモリ ダンプは生成されません。ただし、その他のトレース フラグが使用されると、メモリ ダンプが生成される場合があります。

  • このトレース フラグが実行中のサーバーで有効になっている場合、メモリ ダンプはその時点から自動的には生成されなくなります。ただし、CLR のメモリ不足例外のためにメモリ ダンプが既に生成されている場合は、このトレース フラグの効果はありません。

スコープ : グローバルのみ

7806

SQL Server Express で専用管理者接続 (DAC) を有効にします。既定では、SQL Server Express で予約されている DAC リソースはありません。詳細については、「専用管理者接続の使用」を参照してください。

スコープ : グローバルのみ

説明

SQL Server には、セッションとグローバルという 2 種類のトレース フラグがあります。セッション トレース フラグは、1 つの接続についてアクティブで、その接続に対してのみ表示可能です。グローバル トレース フラグは、サーバー レベルで設定され、サーバー上のすべての接続に対して表示可能です。フラグには、グローバルとしてのみ有効化できるフラグと、グローバルまたはセッション スコープのどちらかで有効化できるフラグがあります。

この場合に当てはまる規則を以下に示します。

  • グローバル トレース フラグは、グローバルに有効化する必要があります。グローバルに有効化しない場合は機能しません。グローバル トレース フラグは、-T コマンド ライン オプションを使用して、起動時に有効化することをお勧めします。

  • トレース フラグのスコープがグローバルまたはセッションのどちらかの場合、適切なスコープで有効化できます。セッション レベルで有効化したトレース フラグは、別のセッションには影響せず、セッションを開いた SPID がログアウトすると無効になります。

トレース フラグを有効または無効にするには、次のいずれかの方法を使用します。

  • DBCC TRACEON と DBCC TRACEOFF コマンドを使用する。

    たとえば、DBCC TRACEON 2528 を考えてみます。トレース フラグをグローバルに有効化するには、DBCC TRACEON を引数 -1 と共に使用し、DBCC TRACEON (2528, -1) のように指定します。グローバル トレース フラグをオフにするには、DBCC TRACEOFF に引数 -1 を指定します。

  • スタートアップ オプション -T を使用して、起動時にトレース フラグを有効に設定する。

    スタートアップ オプション -T を使用すると、トレース フラグをグローバルに有効化できます。スタートアップ オプションでは、セッションレベルのトレース フラグは有効化できません。スタートアップ オプションの詳細については、「SQL Server サービスのスタートアップ オプションの使用」を参照してください。

現在有効なトレース フラグを確認するには、DBCC TRACESTATUS コマンドを使用します。

動作の変更

SQL Server 2000 では、デッドロックをエラー ログに記録するには単に DBCC TRACEON (1204) と指定するだけですが、SQL Server 2008 では、セッションレベルのフラグはデッドロック モニタ スレッドに表示されないため、フラグをグローバルに有効化する必要があります。

動作の変更の詳細については、「SQL Server 2008 におけるデータベース エンジン機能の重大な変更」を参照してください。

次の例では、DBCC TRACEON を使用してトレース フラグ 3205 を有効に設定します。

DBCC TRACEON (3205,-1)