

# RDS for Microsoft SQL Server でのトレースフラグの設定
<a name="Appendix.SQLServer.CommonDBATasks.TraceFlags"></a>

SQL Server トレースフラグは、データベースエンジンの動作を変更するためにオンまたはオフにできる設定です。トレースフラグを使用すると、非表示の機能を有効にしたり、パフォーマンスの問題を修正したり、デフォルトのサーバー動作を上書きしたりできます。実質的に、各トレースフラグは SQL Server のデフォルトの動作を変更するオン/オフスイッチとして機能します。

Microsoft SQL Server で使用可能なトレースフラグの完全なリストについては、Microsoft のドキュメントにある「[DBCC TRACEON - Trace Flags](https://learn.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql?view=sql-server-ver17#trace-flags)」を参照してください。

RDS for SQL Server はマネージドサービスであるため、グローバルなサーバーレベルの設定が制限されています。RDS for SQL Server [DB パラメータグループ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/parameter-groups-overview.html)を通じてスタートアップパラメータとして設定できるのは、特定のトレースフラグのみです。次の表に、RDS for SQL Server でサポートされているトレースフラグを示します。

**重要**  
本番環境でトレースフラグを有効にする前に、徹底的なテストと検証を行うことを強くお勧めします。トレースフラグはパフォーマンスのチューニングとトラブルシューティングに役立ちますが、正しく使用しないと、システムの不安定化、最適ではないクエリプランの生成、またはリソース関連の問題を引き起こす可能性があります。


| トレースフラグ | 説明 | 
| --- | --- | 
| 647 | SQL Server 2012 で導入されたデータ検証チェックをスキップします。このチェックにより、`ALTER TABLE... ADD` 列オペレーションの実行速度を著しく低下させる可能性があります。 | 
| 652 | スキャン時のページプリフェッチを無効にします。これを有効にすると、SQL Server はバッファプールへのページの事前読み込みを停止します。これにより、プリフェッチに依存するクエリのパフォーマンスが低下する可能性があります。 | 
| 692 | ヒープまたはクラスター化インデックスへのデータの一括ロード時に、高速挿入を無効にします (SQL Server 2016 以降でサポート)。 | 
| 1204 | デッドロックに関与しているリソースとロックの種類、および影響を受けている現在のコマンドを返します。 | 
| 1211 | メモリプレッシャーやロック数に基づくロックのエスカレーションを無効にします。SQL Server は、行ロックやページロックをテーブルロックにエスカレートしなくなります。 | 
| 1222 | デッドロック情報を XML 形式で返します (1204 の拡張バージョン)。 | 
| 1224 | ロックの数に基づくロックエスカレーションを無効にします (メモリプレッシャーによるロックエスカレーションは引き続き有効です)。 | 
| 1448 | レプリケーションログリーダーが、非同期セカンダリによる変更の確認を待たずに処理を進めることを許可します。ログリーダーは、同期セカンダリが `SYNCHRONIZED` 状態になるまで待機します。また、確認済みの最小ログシーケンス番号 (LSN) を超えて処理を進めることはありません。 | 
| 2528 | `DBCC CHECKDB`、`DBCC CHECKFILEGROUP`、および `DBCC CHECKTABLE` によるオブジェクトの並列チェックを無効にします。 | 
| 3654 | メモリリークまたは解放されていないメモリ状態のトラブルシューティングに使用します。有効にすると、このような問題が検出された場合、SQL Server はアサーションの失敗をトリガーし、ミニダンプを生成します。このダンプは、トレースフラグ自体によるものではなく、拡張トレースによって基となるメモリエラーが検出された結果です。 | 
| 4138 | `TOP`、`OPTION (FAST N)`、`IN`、または `EXISTS` を使用したクエリの行目標の調整を無効にします。これにより、SQL Server は行目標の最適化なしで完全なプランを生成します。 | 
| 4139 | 先頭の列が昇順、降順、または固定のいずれであるかに関係なく、クエリコンパイル時のヒストグラムを調整してカーディナリティ推定の精度を向上させます。 | 
| 4199 | 複数のトレースフラグで以前に行われた複数のクエリオプティマイザの変更を制御します。 | 
| 4616 | サーバーレベルのメタデータをアプリケーションロールから見えるようにします。アプリケーションロールから見えるようにします。 | 
| 6527 | 共通言語ランタイム (CLR) 統合でメモリ不足エラーが最初に発生した際にメモリダンプが生成されないようにします。 | 
| 7745 | データベースのシャットダウン中にクエリストアがデータをディスクにフラッシュしないようにします。 | 
| 8285 | 変更データキャプチャ (CDC) またはリードコミットスナップショット分離 (RCSI) が有効になっているデータベースで発生するアサーションエラー (`IndexRowScanner.cpp: m_versionStatus.IsVisible()`) を修正します。アサーションを制御されたエラーメッセージに変換する (SQL Server 2022 累積更新プログラム (CU) 6 以降) か、またはアサーションを抑制する (SQL Server 2019) ことで、スタックダンプを防止します。 | 
| 8780 | オプティマイザがより良いプランを見つけるための時間を増やします。 | 
| 9432 | SQL Server 2019 CU14 で修正された、`SESSION_CONTEXT` を使用した並列実行プランにおける誤った結果の修正を無効にします。トレースフラグ 11042 と併用することで、セッションが再利用のためにリセットされたときにアクセス違反ダンプが発生しないようにします。 | 
| 9481 | データベースの互換性レベルに関係なく、クエリオプティマイザにレガシーカーディナリティ推定モデル (SQL Server 2012 以前) を使用するように強制します。代替方法: データベースレベルでは `ALTER DATABASE SCOPED CONFIGURATION` を使用し、クエリレベルでは `QUERYTRACEON` クエリヒントを使用します。 | 
| 9492 | インスタンスレベルで `SELECT INTO` (一括挿入) オペレーションの並列処理を無効にして、`METADATA_SEQUENCE_GENERATOR` での `LATCH_EX` 待機時間を短縮します。パフォーマンスはわずかに低下する可能性がありますが、全体的な安定性が向上します。 | 
| 9592 | 同期可用性グループのログストリーム圧縮を有効にします。圧縮によってレイテンシーが増加するため、ログストリームの圧縮は同期可用性グループではデフォルトで無効になっています。この機能を有効にすると、レプリカ間のネットワーク帯域幅の使用量を削減できますが、CPU 使用率の増加と若干のレイテンシーの上昇という代償を伴います。適用対象: SQL Server 2016 (13.0) 以降。 | 
| 11024 | SQL Server 2017 では、パーティションテーブルの増分統計情報の自動更新が遅延する場合があります。これは、合計カウント数がルートノードのしきい値を超えている場合でも、単一のパーティションの変更数がローカルしきい値を超えない場合に、ルートノードの変更カウントがゼロにリセットされるためです。トレースフラグ 11024 は、ルートノードの変更数をすべてのパーティション変更の合計として維持することでこの問題を修正し、統計情報のタイムリーな更新を保証します。適用対象: SQL Server 2017 CU3 以降。 | 
| 11042 | SQL Server 2019 CU14 は、`SESSION_CONTEXT` を使用した並列実行プランで誤った結果が発生する問題を修正しました。ただし、この修正により、セッションが再利用のためにリセットされた際にアクセス違反ダンプが発生する可能性があります。回避策: トレースフラグ 11042 (`SESSION_CONTEXT` の並列処理を無効化) とトレースフラグ 9432 (元の CU14 修正を無効化) の両方を同時に有効にします。注: これは、最新の SQL Server バージョンにも存在する既知の問題です。Microsoft による恒久的な修正は、今後の CU で提供される予定です。 | 
| 12502 | オンプレミス SQL Server インスタンスの外部認可ポリシーを無効にすることで、`PREEMPTIVE_OS_QUERYREGISTRY` 待機時間が長くなる問題を修正します。適用対象: SQL Server 2022 CU5 以降。 | 
| 12618 | 自動プラン修正 (APC) 機能が同じプランに対して連続して複数のリグレッションチェックを実行できるようにし、修正を決定する前により多くの統計情報を収集できるようにします。適用対象: SQL Server 2022 CU4 以降。 | 
| 12656 | 自動プラン修正 (APC) がプランの変更を検出した後、リグレッションチェックを実行するまでに 5 分の遅延を追加します。これにより、高速実行クエリによる結果の偏りを回避し、変更の影響を受ける実行時間の長いクエリやタイムアウトが発生しやすいクエリにも対応できます。適用対象: SQL Server 2022 CU4 以降。 | 

**注記**  
SQL Server 2016 Service Pack 1 (SP1) 以降では、トレースフラグ 4138 および 4139 の代わりに、クエリレベルで `USE HINT` クエリヒントを使用することをお勧めします。この変更を本番環境に適用する前に、必ず徹底的にテストしてください。

**重要**  
トレースフラグ 7745 を使用すると、シャットダウン中にフラッシュされていないクエリストアデータが失われる可能性があります。SQL Server をすぐにシャットダウンするには、このトレースフラグの代わりに `SHUTDOWN WITH NOWAIT` を使用してください。