适用于: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 Distributed Replay 控制器服务启动时,它会从控制器配置文件加载日志记录级别 DReplayController.config。 此文件位于安装有分布式重播控制器服务的文件夹内:
<控制器安装路径>\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> | 指定会话 ID (SPID) 上的所有连接在压力模式下是应该一起调整 (SPID) 还是单独调整 (Connection)。 | SPID | 连接 | 是的。 默认情况下,该值为 SPID。 | 
| 连接时间刻度 | <ConnectTimeScale> | 用于调整压力模式下的连接时间。 | 介于 1和100之间的整数。 | 不是。 默认情况下,该值为 100。 | 
| 思考时间刻度 | <ThinkTimeScale> | 用于缩放压力模式下的思考时间。 | 介于 0和100之间的整数。 | 不是。 默认情况下,该值为 100。 | 
| 使用连接池 | <UseConnectionPooling> | 指定是否将在每个分布式重播客户端上启用连接池功能。 | 是 |不 | 是的。 默认情况下,该值为 Yes。 | 
| 健康监测时间间隔 | <HealthmonInterval> | 指示运行 Health Monitor 的频率(以秒为单位)。 只在同步模式下才使用该值。 | 整数 >= 1 ( -1为禁用) | 不是。 默认情况下,该值为 60。 | 
| 查询超时 | <QueryTimeout> | 指定查询超时值(以秒为单位)。 返回第一行后该值才会生效。 | 整数 >= 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 跟踪捕获并恢复正常工作负载。