在 SQL Server 数据库实例上运行服务器端跟踪
通过编写脚本创建服务器端跟踪这一过程可能较为复杂,且已超出本文档的讨论范围。本部分包含一些您可以用作示例的示例脚本。与客户端跟踪一样,服务器端跟踪的目的是,创建可通过 Database Engine Tuning Advisor 打开的工作负载文件或跟踪表。
下面显示的是一个简化的示例脚本,用于启动服务器端跟踪并将详细信息捕获到工作负载文件。跟踪最初会将信息保存到 D:\RDSDBDATA\Log 目录中的 RDSTrace.trc 文件,且会每 100 MB 转换一个跟踪文件,这样,后续的跟踪文件命会依次命名为 RDSTrace_1.trc、RDSTrace_2.trc 等。
DECLARE @file_name NVARCHAR(245) = 'D:\RDSDBDATA\Log\RDSTrace'; DECLARE @max_file_size BIGINT = 100; DECLARE @on BIT = 1 DECLARE @rc INT DECLARE @traceid INT EXEC @rc = sp_trace_create @traceid OUTPUT, 2, @file_name, @max_file_size IF (@rc = 0) BEGIN EXEC sp_trace_setevent @traceid, 10, 1, @on EXEC sp_trace_setevent @traceid, 10, 2, @on EXEC sp_trace_setevent @traceid, 10, 3, @on . . . EXEC sp_trace_setfilter @traceid, 10, 0, 7, N'SQL Profiler' EXEC sp_trace_setstatus @traceid, 1 END
以下示例是停止跟踪的脚本。请注意,以前的脚本所创建的跟踪会继续运行,直到您显式地停止跟踪或磁盘空间不足以运行此进程为止。
DECLARE @traceid INT SELECT @traceid = traceid FROM ::fn_trace_getinfo(default) WHERE property = 5 AND value = 1 AND traceid <> 1 IF @traceid IS NOT NULL BEGIN EXEC sp_trace_setstatus @traceid, 0 EXEC sp_trace_setstatus @traceid, 2 END
您可以将服务器端跟踪结果保存到数据库表,然后借助 fn_trace_gettable 函数,将数据库表用作 Tuning Advisor 的工作负载。以下命令会将 D:\rdsdbdata\Log 目录(包括 RDSTrace_1.trc 等所有滚动更新文件)中名为 RDSTrace.trc 的所有文件的结果加载到当前数据库中名为 RDSTrace 的表中。
SELECT * INTO RDSTrace FROM fn_trace_gettable('D:\rdsdbdata\Log\RDSTrace.trc', default);
要将特定滚动更新文件保存到表中,例如 RDSTrace_1.trc 文件,请为 fn_trace_gettable 指定滚动更新文件的名称和替换值 1,以代替默认值这一最后的参数。
SELECT * INTO RDSTrace_1 FROM fn_trace_gettable('D:\rdsdbdata\Log\RDSTrace_1.trc', 1);