搭配 Amazon RDS for Microsoft SQL Server 使用擴充事件
您可以在 Microsoft SQL Server 中使用擴充事件來擷取 Amazon RDS for SQL Server 的偵錯和疑難排解資訊。擴充事件會取代 SQL Trace 和 Server Profiler,其已被 Microsoft 取代。擴充事件類似於分析工具追蹤,但對所追蹤的事件具有更細微的控制。Amazon RDS 上的 SQL Server 2016 和更新版本支援擴充事件。如需詳細資訊,請參閱 Microsoft 文件中的擴充事件概觀
對於在 Amazon RDS for SQL Server 中具有主要使用者權限的使用者,會自動開啟擴充事件。
限制與建議
在 RDS for SQL Server 上使用擴充事件時,會套用下列限制:
-
擴充事件僅支援 Enterprise 和 Standard 版本。
-
您無法變更預設的擴充事件工作階段。
-
請務必將工作階段記憶體分區模式設定為
NONE。 -
工作階段事件保留模式可以是
ALLOW_SINGLE_EVENT_LOSS或ALLOW_MULTIPLE_EVENT_LOSS。 -
不支援 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 存放的程序來顯示這些參數的目前值。例如,使用下列 SQL 陳述式來檢視 xe_session_max_memory 的目前設定。
exec rdsadmin.dbo.rds_show_configuration 'xe_session_max_memory'
您可以使用 rdsadmin.dbo.rds_set_configuration 存放的程序來對其進行修改。例如,使用下列 SQL 陳述式設定 xe_session_max_memory 為 4 MB。
exec rdsadmin.dbo.rds_set_configuration 'xe_session_max_memory', 4
多可用區域部署考量
當您在主要資料庫執行個體上建立擴充事件工作階段時,它不會傳播到待命複本。您可以容錯移轉並在新的主要資料庫執行個體上建立擴充事件工作階段。或者,您可以移除並重新新增異地同步備份組態,將擴充事件工作階段傳播到待命複本。RDS 會停止待命複本上的所有非預設擴充事件工作階段,讓這些工作階段不會耗用待命的資源。因此,待命複本成為主要資料庫執行個體之後,請務必手動啟動新主要資料庫執行個體上的擴充事件工作階段。
注意
這種方法同時適用於「Always On 可用性群組」和「資料庫鏡像」。
您也可以使用 SQL Server 代理程式任務來追蹤待命複本,並在待命成為主要資料庫執行個體時啟動工作階段。例如,在 SQL Server 代理程式任務步驟中使用下列查詢,以重新啟動主要資料庫執行個體上的事件工作階段。
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。您也可以將具有便利間隔的排程新增至此查詢。
查詢擴充的事件檔案
您可以使用 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);