Configure Distributed Replay
适用于:SQL Server 2016 (13.x)、SQL Server 2017 (14.x) 和 SQL Server 2019 (15.x)
重要
SQL Server Distributed Replay 在 SQL Server 2022 (16.x) 中不可用。
Microsoft SQL Server Distributed Replay 配置详细信息在 Distributed Replay 控制器、客户端以及安装有管理工具的位置的 XML 文件中指定。 这些文件包括下面的文件:
控制器配置文件:DReplayController.config
当 SQL Server 分布式重播控制器服务启动时,它将从控制器配置文件 DReplayController.config
加载日志记录级别。 此文件位于安装有分布式重播控制器服务的文件夹内:
<controller installation path>\DReplayController.config
控制器配置文件指定的日志记录级别包括:
设置 | XML 元素 | 说明 | 允许的值 | 必选 |
---|---|---|---|---|
日志记录级别 | <LoggingLevel> |
为控制器服务指定日志记录级别。 | INFORMATION | WARNING | CRITICAL |
不是。 默认情况下,该值为 CRITICAL 。 |
示例
本示例显示一个控制器配置文件,该文件已经过修改以便消除 INFORMATION
和 WARNING
日志条目。
<?xml version='1.0'?>
<Options>
<LoggingLevel>CRITICAL</LoggingLevel>
</Options>
客户端配置文件:DReplayClient.config
当 SQL Server 分布式重播客户端服务启动时,它将从客户端配置文件 DReplayClient.config
加载配置设置。 此文件位于每台客户端上安装有分布式重播客户端服务的文件夹内:
<客户端安装路径>\DReplayClient.config
客户端配置文件指定的设置包括:
设置 | XML 元素 | 说明 | 允许的值 | 必选 |
---|---|---|---|---|
控制器 | <Controller> |
指定控制器的计算机名称。 客户端将尝试通过联系控制器在分布式重播环境中注册。 | 可以用“localhost ”或“. ”指代本地计算机。 |
不是。 默认情况下,客户端会尝试向在本地运行的控制器实例 (“. ”)(如果存在)注册。 |
客户端工作目录 | <WorkingDirectory> |
客户端上用于保存调度文件的本地路径。 此目录中的文件在下一次重播时会被覆盖。 |
以驱动器号开头的完整目录名称。 | 不是。 如果未指定任何值,则调度文件将与默认客户端配置文件保存在同一位置。 如果指定一个值,而该文件夹在客户端上不存在,则客户端服务不会启动。 |
客户端结果目录 | <ResultDirectory> |
客户端上用于保存重播活动(针对客户端)的结果跟踪文件的本地路径。 此目录中的文件在下一次重播时会被覆盖。 |
以驱动器号开头的完整目录名称。 | 不是。 如果未指定任何值,则结果跟踪文件将与默认客户端配置文件保存在同一位置。 如果指定一个值,而该文件夹在客户端上不存在,则客户端服务不会启动。 |
日志记录级别 | <LoggingLevel> |
客户端服务的日志记录级别。 | INFORMATION | WARNING | CRITICAL |
不是。 默认情况下,该值为 CRITICAL 。 |
示例
此示例显示一个客户端配置文件,该文件已经过修改,以指定控制器服务正在名为 Controller1
的另一台计算机上运行。 WorkingDirectory
和 ResultDirectory
元素配置为分别使用文件夹 c:\ClientWorkingDir
和 c:\ResultTraceDir
。 日志记录级别已从默认值改为消除 INFORMATION
和 WARNING
日志条目。
<?xml version='1.0'?>
<Options>
<Controller>Controller1</Controller>
<WorkingDirectory>c:\ClientWorkingDir</WorkingDirectory>
<ResultDirectory>c:\ResultTraceDir</ResultDirectory>
<LoggingLevel>CRITICAL</LoggingLevel>
</Options>
预处理配置文件:DReplay.exe.preprocess.config
当您使用管理工具启动预处理阶段时,管理工具将从预处理配置文件 DReplay.exe.preprocess.config
加载预处理设置。
使用默认配置文件或使用管理工具的 -c 参数来指定修改过的预处理配置文件的位置。 有关使用管理工具的预处理选项的详细信息,请参阅预处理选项(分布式重播管理工具)。
默认情况下,预处理配置文件位于安装有管理工具的文件夹中:
<管理工具安装路径>\DReplayAdmin\DReplay.exe.preprocess.config
预处理配置设置在预处理配置文件的 <PreprocessModifiers>
元素的子级 XML 元素中指定。 这些设置包括:
设置 | XML 元素 | 说明 | 允许的值 | 必选 |
---|---|---|---|---|
包括系统会话活动 | <IncSystemSession> |
指示重播期间是否包括捕获过程中的系统会话活动。 | Yes | No |
不是。 默认情况下,该值为 No 。 |
最长空闲时间 | <MaxIdleTime> |
将空闲时间的上限设为某个绝对值(以秒为单位)。 | >= -1 的整数。-1 表示原始跟踪文件中的原始值没有变化。0 表示在任意给定时间点有某个活动正在进行。 |
不是。 默认情况下,该值为 -1 。 |
示例
默认预处理配置文件:
<?xml version='1.0'?>
<Options>
<PreprocessModifiers>
<IncSystemSession>No</IncSystemSession>
<MaxIdleTime>-1</MaxIdleTime>
</PreprocessModifiers>
</Options>
重播配置文件:DReplay.exe.replay.config
当您使用管理工具启动事件重播阶段时,管理工具将从重播配置文件 DReplay.exe.replay.config
加载重播设置。
使用默认配置文件或使用管理工具的 -c 参数来指定修改过的重播配置文件的位置。 有关使用管理工具的重播选项的详细信息,请参阅重播选项(分布式重播管理工具)。
默认情况下,重播配置文件位于安装有管理工具的文件夹中:
<管理工具安装路径>\DReplayAdmin\DReplay.exe.replay.config
重播配置设置在重播配置文件的 <ReplayOptions>
和 <OutputOptions>
元素的子级 XML 元素中指定。
<ReplayOptions> 元素
重播配置文件在 <ReplayOptions>
元素中指定的设置包括:
设置 | XML 元素 | 说明 | 允许的值 | 必选 |
---|---|---|---|---|
SQL Server 目标实例(测试服务器) | <Server> |
指定要连接的服务器名和 SQL Server 实例名。 | server_name[\instance_name] 不能使用“ localhost ”或“. ”来表示本地主机。 |
否,如果已通过使用管理工具的 -starget server 参数和“重播” 选项指定服务器名称。 |
顺序模式 | <SequencingMode> |
指定用于事件计划的模式。 | synchronization | stress |
不是。 默认情况下,该值为 stress 。 |
压力调整粒度 | <StressScaleGranularity> |
指定服务配置文件标识符 (SPID) 上的所有连接在压力模式下是应该一起调整 (SPID) 还是单独调整 (Connection)。 | SPID | Connection | 是的。 默认情况下,该值为 SPID 。 |
连接时间刻度 | <ConnectTimeScale> |
用于调整压力模式下的连接时间。 | 介于 1 和 100 之间的整数。 |
不是。 默认情况下,该值为 100 。 |
思考时间刻度 | <ThinkTimeScale> |
用于调整压力模式下的思考时间。 | 介于 0 和 100 之间的整数。 |
不是。 默认情况下,该值为 100 。 |
使用连接池 | <UseConnectionPooling> |
指定是否将在每个分布式重播客户端上启用连接池。 | Yes | No | 是的。 默认情况下,该值为 Yes 。 |
Health Monitor 间隔时间 | <HealthmonInterval> |
指示运行 Health Monitor 的频率(以秒为单位)。 只在同步模式下才使用该值。 |
Integer >= 1 ( -1 为禁用) |
不是。 默认情况下,该值为 60 。 |
查询超时 | <QueryTimeout> |
指定查询超时值(以秒为单位)。 返回第一行后该值才会生效。 | Integer >= 1 ( -1 为禁用) |
不是。 默认情况下,该值为 3600 。 |
每个客户端的线程数 | <ThreadsPerClient> |
指定要用于每个重播客户端的重播线程数。 | 介于 1 和 512 之间的整数。 |
不是。 如果未指定,分布式重播将使用值 255 。 |
<OutputOptions> 元素
重播配置文件在 <OutputOptions>
元素中指定的设置包括:
设置 | XML 元素 | 说明 | 允许的值 | 必选 |
---|---|---|---|---|
记录行计数 | <RecordRowCount> |
指示是否应记录每个结果集的行计数。 | Yes | No |
不是。 默认情况下,该值为 Yes 。 |
记录结果集 | <RecordResultSet> |
指示是否应记录所有结果集的内容。 | Yes | No |
不是。 默认情况下,该值为 No 。 |
示例
默认重播配置文件:
<?xml version='1.0'?>
<Options>
<ReplayOptions>
<Server></Server>
<SequencingMode>stress</SequencingMode>
<ConnectTimeScale></ConnectTimeScale>
<ThinkTimeScale></ThinkTimeScale>
<HealthmonInterval>60</HealthmonInterval>
<QueryTimeout>3600</QueryTimeout>
<ThreadsPerClient></ThreadsPerClient>
</ReplayOptions>
<OutputOptions>
<ResultTrace>
<RecordRowCount>Yes</RecordRowCount>
<RecordResultSet>No</RecordResultSet>
</ResultTrace>
</OutputOptions>
</Options>
在同步顺序模式下运行时可能出现的问题
你可能会遇到重播功能看似“停止”或重播事件缓慢的症状。 如果正在重播的跟踪依赖于还原的目标数据库中不存在的数据和/或事件,则可能会出现这种现象。
例如,使用 WAITFOR 的捕获工作负载(如 Service Broker 的 WAITFOR RECEIVE 语句中)。 使用同步顺序模式时,批处理按顺序重播。 如果在数据库备份后,但在启动重播捕获跟踪之前对源数据库进行插入,则在重播过程中发出的 WAITFOR RECEIVE 可能需要等待 WAITFOR 的整个持续时间。 在 WAITFOR RECEIVE 之后重播的事件集将停止。 这可能导致在 WAITFOR 完成之前,重播数据库目标的“批处理请求数/秒”性能监视器计数器降为零。
如果需要使用同步模式并希望避免此行为,必须执行以下操作:
静止将用作重播目标的数据库。
允许所有挂起的活动完成。
备份数据库并允许备份完成。
启动 Distributed Replay 跟踪捕获并恢复正常工作负载。