Amazon RDS for Microsoft SQL Server で拡張イベントを使用する
Microsoft SQL Server の拡張イベントを使用して、Amazon RDS for SQL Server のデバッグおよびトラブルシューティング情報をキャプチャできます。拡張イベントは、Microsoft によって非推奨にされている SQL Trace と Server Profiler を置き換えます。拡張イベントは、プロファイラートレースに似ていますが、トレースされるイベントをより細かく制御できます。拡張イベントは、Amazon RDS で SQL Server バージョン 2016 以降でサポートされています。詳細については、Microsoft のドキュメントの「Extended events overview
Amazon RDS for SQL Server のマスターユーザー特権を持つユーザーの場合、拡張イベントは自動的にオンになります。
制限と推奨事項
RDS for SQL Server で拡張イベントを使用する場合、次の制限が適用されます。
-
拡張イベントは、Enterprise エディションと Standard エディションでのみサポートされます。
-
デフォルトの拡張イベントセッションは変更できません。
-
セッションメモリのパーティションモードを
NONE
に設定してください。 -
セッションイベント保持モードは、
ALLOW_SINGLE_EVENT_LOSS
またはALLOW_MULTIPLE_EVENT_LOSS
のいずれかになります。 -
Event Tracing for Windows (ETW) ターゲットはサポートされていません。
-
ファイルターゲットが
D:\rdsdbdata\log
ディレクトリにあることを確認します。 -
ペアが一致するターゲットの場合は、
respond_to_memory_pressure
プロパティを1
に設定します。 -
リングバッファーターゲットメモリは 4 MB を超えることはできません。
-
次のアクションはサポートされていません。
-
debug_break
-
create_dump_all_threads
-
create_dump_single_threads
-
-
rpc_completed
イベントは、15.0.4083.2、14.0.3370.1、13.0.5865.1、12.0.6433.1、11.0.7507.2 以降のバージョンでサポートされています。
RDS for SQL Server での拡張イベントの設定
RDS for SQL Server では、拡張イベントセッションの特定のパラメータ値を設定できます。次の表では、設定可能なパラメータについて説明しています。
パラメータ名 | 説明 | RDS デフォルト値 | 最小値 | 最大値 |
---|---|---|---|---|
xe_session_max_memory |
イベントバッファリングのためにセッションに割り当てるメモリの最大量を指定します。この値は、イベントセッションの max_memory 設定に対応しています。 |
4 MB | 4 MB | 8 MB |
xe_session_max_event_size |
大きなイベントで許可される最大メモリサイズを指定します。この値は、イベントセッションの max_event_size 設定に対応しています。 |
4 MB | 4 MB | 8 MB |
xe_session_max_dispatch_latency |
拡張イベントセッションターゲットにディスパッチされるまでにイベントがメモリにバッファされる時間を指定します。この値は、イベントセッションの max_dispatch_latency 設定に対応しています。 |
30 秒 | 1 秒 | 30 秒 |
xe_file_target_size |
ファイルターゲットの最大サイズを指定します。この値は、ファイルターゲットの max_file_size 設定に対応します。 |
100 MB | 10 MB | 1 GB |
xe_file_retention |
イベントセッションのファイルターゲットによって生成されたファイルの保存期間を日単位で指定します。 | 7 日間 | 0 日 | 7 日間 |
注記
xe_file_retention
をゼロに設定すると、これらのファイルのロックが SQL Server によって解放された後、.xel ファイルが自動的に削除されます。ロックは、.xel ファイルが xe_file_target_size
で設定されたサイズ制限に達すると解放されます。
rdsadmin.dbo.rds_show_configuration
ストアドプロシージャを使用して、これらのパラメータの現在の値を表示できます。例えば、xe_session_max_memory
の現在の設定を表示するには、次の SQL 文を使用します。
exec rdsadmin.dbo.rds_show_configuration 'xe_session_max_memory'
rdsadmin.dbo.rds_set_configuration
ストアドプロシージャを使用して変更することができます。例えば、xe_session_max_memory
を 4 MB に設定するには、次の SQL ステートメントを使用します。
exec rdsadmin.dbo.rds_set_configuration 'xe_session_max_memory', 4
マルチ AZ 配置に関する考慮事項
プライマリ DB インスタンスで拡張イベントセッションを作成すると、そのセッションはスタンバイレプリカに伝達されません。新しいプライマリ DB インスタンスで、拡張イベントセッションをフェイルオーバーして作成できます。または、マルチ AZ 設定を削除してから再び追加して、拡張イベントセッションをスタンバイレプリカに伝達することもできます。RDS は、スタンバイレプリカ上のデフォルト以外の拡張イベントセッションをすべて停止し、これらのセッションがスタンバイ上のリソースを消費しません。このため、スタンバイレプリカがプライマリ DB インスタンスになった後、新しいプライマリで拡張イベントセッションを手動で開始するようにしてください。
注記
このアプローチは、Always On 可用性グループとデータベースミラーリングの両方に適用されます。
SQL Server エージェントジョブを使用して、スタンバイレプリカを追跡し、スタンバイがプライマリになる場合はセッションを開始することもできます。例えば、SQL Server エージェントのジョブステップで次のクエリを使用して、プライマリ DB インスタンスでイベントセッションを再開します。
BEGIN IF (DATABASEPROPERTYEX('rdsadmin','Updateability')='READ_WRITE' AND DATABASEPROPERTYEX('rdsadmin','status')='ONLINE' AND (DATABASEPROPERTYEX('rdsadmin','Collation') IS NOT NULL OR DATABASEPROPERTYEX('rdsadmin','IsAutoClose')=1) ) BEGIN IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe1') ALTER EVENT SESSION xe1 ON SERVER STATE=START IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe2') ALTER EVENT SESSION xe2 ON SERVER STATE=START END END
このクエリにより、イベントセッション xe1
と xe2
が停止状態の場合は、これらのイベントセッションがプライマリ DB インスタンスで再開されます。また、このクエリに便利な間隔のスケジュールを追加することもできます。
拡張イベントファイルのクエリ
SQL Server Management Studio または sys.fn_xe_file_target_read_file
関数を使用して、ファイルターゲットを使用する拡張イベントのデータを表示できます。この関数の詳細については、Microsoft ドキュメントの sys.fn_xe_file_target_read_file (Transact-SQL)
拡張イベントファイルターゲットは、RDS for SQL Server の D:\rdsdbdata\log
ディレクトリにのみファイルを書き込むことができます。
例えば、次の SQL クエリを使用して、名前が xe
で始まる拡張イベントセッションのすべてのファイルの内容を一覧表示します。
SELECT * FROM sys.fn_xe_file_target_read_file('d:\rdsdbdata\log\xe*', null,null,null);