确定表或存储过程是否应移植到内存中 OLTP

SQL Server Management Studio 中的事务性能收集器可帮助你评估In-Memory OLTP 是否会提高数据库应用程序的性能。 事务性能分析报告还指示在应用程序中启用内存中 OLTP 所必须完成的工作量。 在你标识了要移植到内存中 OLTP 的基于磁盘的表之后,可以使用 内存优化顾问帮助你迁移表。 同样, Native Compilation Advisor 帮助您将存储过程移植到本机编译的存储过程。

本主题讨论如何:

  • 配置管理数据仓库。

  • 配置数据收集。

  • 生成事务性能分析报告以便标识性能至关重要的表和存储过程。

有关迁移方法的信息,请参阅 内存中 OLTP - 常见的工作负荷模式和迁移注意事项

事务性能收集器和事务性能分析报告可帮助您完成下列任务:

  • 分析工作负荷以确定内存中 OLTP 能否提升性能。 事务性能收集器收集并评估工作负荷的性能特征。 . 之后,事务性能分析报告会建议可从转换到内存中 OLTP 获益最多的表和存储过程。

  • 帮助您规划和执行到内存中 OLTP 的迁移。 从基于磁盘的表到内存优化表的迁移路径可能比较费时。 内存优化顾问可帮助您找到表中的不兼容之处(必须在将表迁移到内存中 OLTP 之前予以解决)。 此外,内存优化顾问还可帮助您了解将表迁移到内存优化表会对应用程序产生何种影响。

    在规划到内存中 OLTP 的迁移时,或每当您需要将某些表或存储过程迁移到内存中 OLTP 时,都可了解应用程序是否可从内存中 OLTP 获益。

    重要

    数据库的性能取决于多种因素,不是所有这些因素都能被事务性能收集器发现和度量。 因此,事务性能分析报告不保证实际性能收益会符合其预测(如果作出任何预测)。

安装 SQL Server 2019 (15.x) 时,选择“管理工具-基本”或“管理工具-高级”时,将安装事务性能收集器和生成事务性能分析报告的功能。

最佳实践

下面的流程图给出了建议的工作流程。 黄色节点表示可选过程:

AMR 工作流

可以使用任何方法来建立性能基线,包括但不限于使用性能计数器日志或SQL Server活动监视器。 可在性能基准和比较中使用的信息包括:

  • SQL Server的 CPU 消耗量。

  • SQL Server的内存消耗。

  • SQL Server的 I/O 活动。

  • 处理事务时,实例的事务吞吐量。

事务性能收集器每 15 分钟捕获数据。 若要获得稳定的结果,运行事务性能收集器至少 1 小时。 若要获得最佳结果,请根据需要运行尽可能长时间的事务性能收集器,以便捕获针对您的主要情形的数据。 只有在完成数据收集后,才生成事务性能分析报告。

将事务性能收集器配置为在生产中的SQL Server实例上运行,并在开发 (测试) 环境中收集SQL Server实例上的数据,以确保将开销降到最低。 有关如何在远程SQL Server实例的 Management Data Warehouse 数据库中保存数据的信息,请参阅在远程SQL Server实例上配置数据收集

性能影响

事务性能收集器由两个数据收集组构成:

  • 表使用情况分析

  • 存储过程分析

事务性能收集器的收集组每 15 分钟从三个动态管理视图 (DMV) 设置收集数据,并且将数据上载到配置为充当管理数据仓库的数据库。 上载收集的数据会产生最小的性能影响。

使用事务性能收集器

以下步骤需要在 SQL Server 2019 (15.x) 中SQL Server Management Studio。

重要

不要在探查期间更改架构(例如,添加或删除数据库或创建或删除表)。 如果您在收集数据时更改数据库的架构,则报告中可能不会准确地包含该数据库。

配置管理数据仓库

必须配置管理数据仓库以便使用事务性能收集器。

将在 (配置文件) 上收集数据的 SQL Server 实例的版本应与配置管理Data Warehouse SQL Server的版本相同或更早。

  1. 在对象资源管理器中,展开 “管理”

  2. 右键单击“数据收集”,选择“任务”,然后选择“配置管理Data Warehouse”。 “配置管理Data Warehouse向导”随即开始。

  3. 单击“下一步”,选择将充当管理Data Warehouse的数据库。

  4. 单击“ 新建 ”以创建用于保存配置文件数据的新数据库。 创建完数据库后,单击向导中的“ 下一步 ”。

  5. 在向导中的下一步,可以添加用户并登录。 可以将登录映射到 MDW 实例的角色成员身份。 从本地实例收集数据时无需执行该操作。 如果不是从本地实例收集数据,则可将数据库角色成员身份 mdw_admin 授予将运行待探查事务的帐户。 完成后单击“下一步”。

  6. 确保SQL Server 代理正在运行。

  7. 在下一个屏幕上,单击“ 完成 ”退出向导。

在本地SQL Server实例上配置数据收集

数据收集需要启动SQL Server 代理。 在一个服务器上,您仅需配置一个数据收集器。

可以在 SQL Server 2012 或更高版本的 SQL Server 上配置数据收集器。

若要配置数据收集以便上载到同一实例上的管理数据仓库数据库,请执行以下步骤:

  1. “对象资源管理器”中,展开“管理”。

  2. 右键单击“ 数据收集”,选择“ 任务”,然后选择 “配置数据收集”。 “配置数据收集向导”随即开始。

  3. 单击“ 下一步 ”以选择将收集配置文件数据的数据库。

  4. 选择当前SQL Server实例和该实例上的 Management Data Warehouse 数据库。

  5. 在标记为 “选择要启用的数据收集器集”的框中,选择“ 事务性能收集组”。 操作完成后,单击“下一步”。

  6. 验证所做的选择。 单击“ 上一页 ”修改设置。 完成后,单击“ 完成 ”。

在远程 SQL Server 实例上配置数据收集

数据收集需要在将收集数据的实例上启动SQL Server 代理。

可以在 SQL Server 2012 或更高版本的 SQL Server 上配置数据收集器。

需要使用正确的凭据建立SQL Server 代理代理,以便数据收集器将数据上传到实例上的管理Data Warehouse数据库,该实例不同于将分析事务的位置。 若要启用SQL Server 代理代理,必须先使用已启用域的登录名建立凭据。 该启用域的登录必须是管理数据仓库数据库的 mdw_admin 组的成员。 有关如何创建凭据的信息,请参阅如何:创建凭据 (SQL Server Management Studio)

若要配置数据收集以便上载到不同实例上的管理数据仓库数据库,请执行以下步骤:

  1. 在包含要迁移到 In-Memory OLTP 的基于磁盘的对象的实例上,展开 对象资源管理器 中的“管理”节点。

  2. 右键单击“ 数据收集 ”并选择“ 任务 ”,然后选择 “配置数据收集”。 “配置数据收集向导”随即开始。

  3. 单击“ 下一步 ”以选择将收集配置文件数据的数据库。

  4. 确保管理Data Warehouse数据库存在于另一个SQL Server实例上。

  5. 选择另一个SQL Server实例,并在该实例上选择一个 Management Data Warehouse 数据库。

    将在 (配置文件) 上收集数据的 SQL Server 实例的版本应与配置管理Data Warehouse SQL Server的版本相同或更早。

  6. 在标记为 “选择要启用的数据收集器集”的框中,选择“ 事务性能收集组”。

  7. 选择“使用SQL Server 代理代理进行远程上传”。

  8. 操作完成后,单击“下一步”。

  9. 选择代理。

    如果要创建新的SQL Server 代理代理,

    1. 单击“ 新建 ”以显示“ 新建代理帐户 ”对话框。

    2. 在“ 新建代理帐户 ”对话框中,输入代理的名称,选择凭据,并根据需要输入说明。 然后,单击“ 主体”。

    3. 单击“ 添加 ”并选择“ Msdb 角色”。

    4. 选择 dc_proxy 并单击“ 确定”。 然后再次单击“确定”

    选择正确的代理后,单击“ 下一步”。

  10. 若要配置系统收集集,检查系统收集集并单击“下一步”。

  11. 验证所做的选择。 单击“ 返回 ”以修改设置。 完成时 Clicck 完成

数据收集组现已配置完成并运行在实例上。

生成报告

可以通过右键单击“管理”Data Warehouse的数据库并选择“报表”、“管理Data Warehouse”和“事务性能分析概述”来生成事务性能分析报告。

该报告收集有关工作负荷服务器上的所有用户数据库的信息。 如果您的管理数据仓库 (MDW) 数据库在本地计算机上,会在报告中看到 MDW 数据库。

CPU 时间与占用时间的比值较高的存储过程适合迁移。 该报告显示所有表引用,因为本机编译的存储过程只能引用内存优化的表,这可能加大迁移成本。

表的详细报告包含三个部分:

  • 扫描统计信息部分

    本部分包含一个表,其中显示已收集的有关数据库表扫描的统计信息。 列包括:

    • 总访问次数百分比。 对此表的扫描和查询次数相对于整个数据库的活动的百分比。 这个比例越高,使用此表的频率相对于数据库中的其他表就越大。

    • 查找统计数据/范围扫描统计数据。 此列记录在探查期间对表执行的点查询和范围扫描(索引扫描和表扫描)次数。 每事务的平均值为估计值。

    • 互操作提升和本机提升。 这些列估计在将表转换为内存优化表时,点查询或范围扫描将会获得的性能优势量。

  • 争用统计数据部分

    本部分包含一个表,其中显示数据库表的争用。 有关数据库闩锁和锁的详细信息,请参阅 锁定体系结构。 这些列如下所示:

    • 总等待百分比。 此数据库表上闩锁和锁等待数占数据库活动的百分比。 这个比例越高,使用此表的频率相对于数据库中的其他表就越大。

    • 闩锁统计信息。 这些列记录涉及此表的查询的闩锁等待数。 有关闩锁的信息,请参阅 闩锁。 此数值越高,表的闩锁争用就越多。

    • 锁定统计信息。 这组列记录对此表的查询的页锁定获取和等待次数。 有关锁的详细信息,请参阅了解SQL Server中的锁定。 等待越多,对表的锁定争用就越多。

  • 迁移难度部分

    本部分包含一个表,其中显示将此数据库表转换为内存优化表的困难程度。 难度等级越高,转换表的难度就越大。 若要查看转换此数据库表的详细信息,请使用 内存优化顾问

表详细信息报表上的扫描和争用统计信息是从 sys.dm_db_index_operational_stats (Transact-SQL) 收集和聚合的。

存储过程的详细报告包含两个部分:

  • 执行统计信息部分

    本部分包含一个表,其中显示与已收集的存储过程执行相关的统计信息。 这些列如下所示:

    • 缓存的时间。 高速缓存此执行计划的时间。 如果存储过程删除计划高速缓存并重新输入,这里将有每个缓存的时间。

    • 总 CPU 时间。 存储过程在探查期间使用的总 CPU 时间。 此数值越高,存储过程使用的 CPU 就越多。

    • 总执行时间。 存储过程在探查期间使用的执行时间总量。 此数值与 CPU 时间之间的差值越高,存储过程使用 CPU 的效率就越低。

    • 总高速缓存失误数。 探查期间由存储过程执行引起的高速缓存失误数(从物理存储读取)。

    • 执行计数。 在探查期间,此存储过程执行的次数。

  • 表引用部分

    本部分包含一个表,其中显示此存储过程引用的那些表。 在将存储过程转换为本机编译的存储过程前,所有这些表必须转换为内存优化表,且它们必须位于同一服务器和数据库上。

存储过程详细信息报表的执行统计信息是从 sys.dm_exec_procedure_stats (Transact-SQL) 收集和聚合的。 引用是从 sys.sql_expression_dependencies (Transact-SQL) 获取的

若要查看有关如何将存储过程转换为本机编译存储过程的详细信息,请使用 本机编译顾问

另请参阅

迁移到内存中 OLTP