SQL Server 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 功能可帮助你评估即将进行的 SQL Server 升级的影响。 你还可以使用它来帮助评估硬件和操作系统升级以及 SQL Server 优化的影响。
在 SQL Server 2022 中弃用 Distributed Replay
从 SQL Server 2022 (16.x) 开始已弃用 Distributed Replay,如 SQL Server 2022 (16.x) 中弃用的数据库引擎功能中所述。 Distributed Replay 依赖于从 SQL Server 2022 (16.x) 中删除的 SQL Server Native Client (SNAC)。 此更改记录在 SQL Server Native Client 的支持策略中。 此外,Distributed Replay 依赖于使用 SQL 跟踪和 SQL Server Profiler 捕获的 .trc
文件,这两种方法也已弃用。
已从 SQL Server 2022 (16.x) 安装程序中删除了 Distributed Replay 控制器,并且从版本 18 开始,Distributed Replay 客户端在 SQL Server Management Studio (SSMS) 中不再可用。 要获取 Distributed Replay 控制器,必须安装 SQL Server 2019 (15.x) 或早期版本。 要获取 Distributed Replay 客户端,必须安装 SSMS 17.9.1。
对于 SQL Server 2022 (16.x) 上的客户,可以改用重播标记语言 (RML) 实用工具(包括 ostress)来重播工作负载。
分布式重播的优点
与 SQL Server Profiler 类似,你可以使用 Distributed Replay 针对升级后的测试环境重播捕获的跟踪。 与 SQL Server Profiler 不同的是,Distributed Replay 并不仅限于从单台计算机重播工作负载。
与 SQL Server Profiler 相比,Distributed Replay 提供了一个更具伸缩性的解决方案。 使用分布式重播,您可以从多台计算机重播工作负荷,并更好地模拟关键任务型工作负荷。
Distributed Replay 功能可以从多台计算机重播跟踪数据,并模拟任务关键型工作负载。 可使用分布式重播进行应用程序兼容性测试、性能测试或容量规划。
何时使用 Distributed Replay
SQL Server Profiler 和 Distributed Replay 在功能上有些重复。
可以使用 SQL Server Profiler 针对升级的测试环境重播捕获的跟踪。 还可以分析重播结果以查找潜在的功能和性能不兼容问题。 但是,SQL Server Profiler 只能从单台计算机重播工作负载。 重播具有许多活动的并发连接或较高吞吐量的密集型 OLTP 应用程序时,SQL Server Profiler 可能会成为资源瓶颈。
与 SQL Server Profiler 相比,Distributed Replay 提供了一个更具伸缩性的解决方案。 使用分布式重播可以从多台计算机重播工作负荷,并更好地模拟关键任务型工作负荷。
下表介绍了适当使用每种工具的情况。
工具 | 在以下情况下使用... |
---|---|
SQL Server Profiler | 您希望在单台计算机上使用传统的重播机制。 特别是,你需要逐行调试功能,如“步骤”、“运行至光标处”和“切换断点”命令。 您要重播 Analysis Services 跟踪。 |
分布式重播 | 您要评估应用程序兼容性。 例如,您要测试 SQL Server 和操作系统升级方案、硬件升级或索引优化。 捕获的跟踪中的并发率过高,以致于单个重播客户端不足以对其进行模拟。 |
Distributed Replay 概念
以下组件组成分布式重播环境:
Distributed Replay 管理工具:一个控制台应用程序 DReplay.exe, 可用来与分布式重播控制器进行通信。 使用管理工具可控制分布式的重播。
Distributed Replay 控制器:运行名为 SQL Server 的 Distributed Replay 控制器的 Windows 服务的一台计算机。 Distributed Replay 控制器协调分布式的重播客户端的操作。 在每个 Distributed Replay 环境中只能有一个控制器实例。
Distributed Replay 客户端:运行名为 SQL Server Distributed Replay 客户端的 Windows 服务的一台或多台计算机(物理或虚拟)。 多个 Distributed Replay 客户端一起来模拟 SQL Server实例的工作负荷。 在每个 Distributed Replay 环境中可以有一个或多个客户端。
目标服务器:Distributed Replay 客户端可用于重播跟踪数据的 SQL Server 实例。 建议将目标服务器置于测试环境中。
分布式重播管理工具、控制器和客户端可安装在不同计算机或同一计算机上。 一台计算机上只能运行分布式重播控制器或客户端服务的一个实例。
下图展示了 SQL Server 分布式重播物理体系结构:
Distributed Replay 任务
任务说明 | 项目 |
---|---|
介绍如何配置分布式重播。 | 配置 Distributed Replay |
介绍如何准备输入跟踪数据。 | 准备输入跟踪数据 |
介绍如何重播跟踪数据。 | 重播跟踪数据 |
介绍如何查看分布式重播跟踪数据结果。 | 查看重播结果 |
介绍如何使用管理工具以启动、监视和取消控制器上的操作。 | 管理工具命令行选项(分布式重播实用工具) |
要求
使用 Distributed Replay 功能之前,请考虑本文中列出的产品要求。
输入跟踪要求
若要成功地重播跟踪数据,它必须满足版本和格式的要求,并包含所需的事件和列。
输入跟踪版本
Distributed Replay 支持在以下版本的 SQL Server中所收集的输入跟踪数据:
- SQL Server 2019 (15.x)
- SQL Server 2017 (14.x)(累积更新 1 及更高版本 - 请参阅 SQL Server 2017 累积更新)
- SQL Server 2016 (13.x)
- SQL Server 2014 (12.x)
- SQL Server 2012 (11.x)
- SQL Server 2008 R2 (10.50.x)
- SQL Server 2008 (10.0.x)
- SQL Server 2005 (9.x)
输入跟踪格式
输入跟踪数据可以采用以下任意一种格式:
具有
.trc
扩展名的单个跟踪文件。一组遵循文件滚动更新命名约定(例如:
<TraceFile>.trc
、<TraceFile>_1.trc
、<TraceFile>_2.trc
、<TraceFile>_3.trc
…<TraceFile>_n.trc
)的滚动更新跟踪文件。
输入跟踪事件和列
输入跟踪数据必须包含特定的事件和列才能由 Distributed Replay 进行重播。 中的 TSQL_Replay SQL Server Profiler 模板包含所有必需的事件和列以及其他信息。 有关该模板的详细信息,请参阅 Replay Requirements。
警告
如果没有使用 TSQL_Replay 模板来捕获输入跟踪数据,或者未满足输入跟踪要求,则可能会收到意外的重播结果。
您也可以创建一个自定义跟踪模板,并使用该模板通过 Distributed Replay 来重播事件,前提条件是该模板包含以下事件:
- 审核登录
- 审核注销
- ExistingConnection
- RPC Output Parameter
- RPC:Completed
- RPC:Starting
- SQL:BatchCompleted
- SQL:BatchStarting
如果要重播服务器端游标,则还需要以下事件:
- CursorClose
- CursorExecute
- CursorOpen
- CursorPrepare
- CursorUnprepare
如果要重播服务器端准备的 SQL 语句,则还需要以下事件:
- Exec Prepared SQL
- Prepare SQL
所有输入跟踪数据都必须包含以下列:
- Event Class
- EventSequence
- TextData
- 应用程序名称
- LoginName
- DatabaseName
- 数据库 ID
- HostName
- Binary Data
- SPID
- Start Time
- EndTime
- IsSystem
支持的输入跟踪和目标服务器组合
下表列出了支持的跟踪数据版本,以及对于每种版本,可对其重播数据的 SQL Server 支持版本。
输入跟踪数据的版本 | 目标服务器实例支持的 SQL Server 版本 |
---|---|
SQL Server 2005 (9.x) | SQL Server 2008 (10.0.x)、SQL Server 2008 R2 (10.50.x)、SQL Server 2012 (11.x)、SQL Server 2014 (12.x)、SQL Server 2016 (13.x)、SQL Server 2017 (14.x)、SQL Server 2019 (15.x) |
SQL Server 2008 (10.0.x) | SQL Server 2008 (10.0.x)、SQL Server 2008 R2 (10.50.x)、SQL Server 2012 (11.x)、SQL Server 2014 (12.x)、SQL Server 2016 (13.x)、SQL Server 2017 (14.x)、SQL Server 2019 (15.x) |
SQL Server 2008 R2 (10.50.x) | SQL Server 2008 R2 (10.50.x)、SQL Server 2012 (11.x)、SQL Server 2014 (12.x)、SQL Server 2016 (13.x)、SQL Server 2017 (14.x)、SQL Server 2019 (15.x) |
SQL Server 2012 (11.x) | SQL Server 2012 (11.x)、SQL Server 2014 (12.x)、SQL Server 2016 (13.x)、SQL Server 2017 (14.x)、SQL Server 2019 (15.x) |
SQL Server 2014 (12.x) | SQL Server 2014 (12.x)、SQL Server 2016 (13.x)、SQL Server 2017 (14.x)、SQL Server 2019 (15.x) |
SQL Server 2016 (13.x) | SQL Server 2016 (13.x)、SQL Server 2017 (14.x)、SQL Server 2019 (15.x) |
SQL Server 2017 (14.x) | SQL Server 2017 (14.x)、SQL Server 2019 (15.x) |
SQL Server 2019 (15.x) | SQL Server 2019 (15.x) |
操作系统要求
支持运行管理工具、控制器和客户端服务的操作系统与 SQL Server 实例所要求的操作系统相同。 有关 SQL Server 实例支持哪些操作系统的更多信息,请参阅 SQL Server 2016 和 2017:硬件和软件要求。
Distributed Replay 功能在基于 x86 和基于 x64 的操作系统上均受支持。 对于基于 x64 的操作系统,仅支持 Windows on Windows (WOW) 模式。
安装限制
任何一台计算机只能安装每个 Distributed Replay 功能的一个实例。 下表列出了在单个 Distributed Replay 环境中每种功能所允许的安装数。
Distributed Replay 功能 | 每个重播环境的最大安装数 |
---|---|
SQL Server Distributed Replay 控制器服务 | 1 |
SQL Server Distributed Replay 客户端服务 | 16(物理或虚拟计算机) |
管理工具 | 无限制 |
注意
虽然一台计算机上只能安装一个管理工具实例,但是您可以启动管理工具的多个实例。 多个管理工具发出的命令按照接收命令的顺序进行解析。
数据访问提供程序
Distributed Replay 仅支持 SQL Server Native Client ODBC 数据访问接口。
目标服务器准备要求
建议将目标服务器置于测试环境中。 若要针对 SQL Server 的其他实例而非最初记录跟踪数据的实例重播跟踪数据,请确保在目标服务器上执行了以下步骤:
跟踪数据中包含的所有登录名和用户必须出现在目标服务器的相同数据库中。
目标服务器上的所有登录名和用户拥有的权限必须与他们在原始服务器上的权限相同。
目标上的数据库 ID 最好与源上的数据库 ID 相同。 但是,如果它们不相同,当跟踪中出现 DatabaseName 时,将根据它进行匹配。
跟踪数据中包含的每个登录名的默认数据库必须设置(在目标服务器上)为该登录名相应的目标数据库。 例如,要重播的跟踪数据包含登录名 Fred在原始 实例上 Fred_Db SQL Server数据库中的活动。 因此,在目标服务器上,必须将登录名 Fred的默认数据库设置为与 Fred_Db 匹配的数据库(即使数据库名称不同)。 若要设置登录名的默认数据库,请使用
sp_defaultdb
系统存储过程。
重播与不存在的或不正确的登录名相关的事件会导致重播错误,但重播操作会继续。