你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

获取迁移 SQL Server 数据库的 Azure 建议

Azure Data Studio 的 Azure SQL 迁移扩展可帮助你评估数据库要求、获取针对 Azure 资源的大小合适的 SKU 建议,并将 SQL Server 数据库迁移到 Azure。

了解如何使用此统一体验从源 SQL Server 实例收集性能数据,以获取针对 Azure SQL 目标的大小合适的 Azure 建议。

概述

在迁移到 Azure SQL 之前,可以使用 Azure Data Studio 中的 SQL 迁移扩展来帮助你为 Azure SQL 数据库、Azure SQL 托管实例和 Azure 虚拟机目标上的 SQL Server 生成大小合适的建议。 该工具可帮助你从源 SQL 实例(在本地或其他云中运行)收集性能数据,并根据工作负载需求推荐计算和存储配置。

下图显示了 Azure Data Studio 的 Azure SQL 迁移扩展中的 Azure 建议工作流:

显示 SKU 建议过程工作流的关系图。

注意

适用于 Azure Data Studio 的 Azure SQL 迁移扩展中的评估和 Azure 建议功能还支持在 Windows 或 Linux 上运行的源 SQL Server 实例。

先决条件

若要开始使用 SQL Server 数据库迁移的 Azure 建议,必须满足以下先决条件:

支持的源和目标

可为以下 SQL Server 版本生成 Azure 建议:

  • Windows 或 Linux 支持 SQL Server 2008 及更高版本。
  • 可能支持其他云上运行的 SQL Server,但结果的准确性可能有所不同

可为以下 Azure SQL 目标生成 Azure 建议:

  • Azure SQL 数据库
    • 硬件系列:标准系列(第 5 代)
    • 服务层级:常规用途、业务关键、超大规模
  • Azure SQL 托管实例
    • 硬件系列:标准系列(第 5 代)、高级系列、内存优化高级系列
    • 服务层级:常规用途、业务关键
  • Azure 虚拟机上的 SQL Server
    • VM 系列:常规用途、内存优化
    • 存储系列:高级 SSD

性能数据收集

在生成建议之前,需要从源 SQL Server 实例收集性能数据。 在执行此数据收集步骤期间,将查询 SQL Server 实例中的多个动态系统视图 (DMV),以捕获工作负载的性能特征。 该工具每隔 30 秒捕获指标(包括 CPU、内存、存储和 IO 使用情况),并将性能计数器作为一组 CSV 文件保存到计算机本地。

实例级别

将收集每个 SQL Server 实例的以下性能数据:

性能维度 说明 动态管理视图 (DMV)
SqlInstanceCpuPercent SQL Server 进程使用的 CPU 数量(百分比) sys.dm_os_ring_buffers
PhysicalMemoryInUse SQL Server 进程的总内存占用量 sys.dm_os_process_memory
MemoryUtilizationPercentage SQL Server 的内存利用率 sys.dm_os_process_memory

数据库级别

性能维度 说明 动态管理视图 (DMV)
DatabaseCpuPercent 数据库使用的 CPU 总数百分比 sys.dm_exec_query_stats
CachedSizeInMb 数据库使用的缓存总大小(以 MB 为单位) sys.dm_os_buffer_descriptors

文件级别

性能维度 说明 动态管理视图 (DMV)
ReadIOInMb 从此文件读取的总兆字节数 sys.dm_io_virtual_file_stats
WriteIOInMb 写入此文件的总兆字节数 sys.dm_io_virtual_file_stats
NumOfReads 对此文件发出的读取总次数 sys.dm_io_virtual_file_stats
NumOfWrites 对此文件发出的写入总次数 sys.dm_io_virtual_file_stats
ReadLatency 此文件的 IO 读取延迟 sys.dm_io_virtual_file_stats
WriteLatency 此文件的 IO 写入延迟 sys.dm_io_virtual_file_stats

在生成建议之前至少需要花费 10 分钟来收集数据,但为了准确评估工作负载,建议运行数据收集足够长的时间,以捕获高峰和非高峰使用情况。

若要启动数据收集过程,首先请连接到 Azure Data Studio 中的源 SQL 实例,然后启动 SQL 迁移向导。 在步骤 2 中,选择“获取 Azure 建议”。 选择“立即收集性能数据”,然后在计算机上选择一个用于保存收集的数据的文件夹。

屏幕截图显示了用于收集 SKU 建议性能数据的向导窗格。

数据收集过程需运行 10 分钟才能生成首个建议。 务必要在活动数据库工作负载反映的使用情况接近于你的生产方案时启动数据收集过程。

生成第一个建议后,可以继续运行数据收集过程来优化建议。 此选项非常适合使用模式随时间变化的情况。

选择“开始”后,数据收集过程随即开始。 每隔 10 分钟会将收集的数据点聚合,并将每个计数器的最大值、平均值和方差以三个 CSV 文件为一组的形式写入磁盘。

通常,你会在选定的文件夹中看到具有以下后缀的一组 CSV 文件:

  • SQLServerInstance_CommonDbLevel_Counters.csv:包含有关数据库文件布局和元数据的静态配置数据。
  • SQLServerInstance_CommonInstanceLevel_Counters.csv:包含有关服务器实例的硬件配置的静态数据。
  • SQLServerInstance_PerformanceAggregated_Counters.csv:包含经常更新的聚合性能数据。

在此期间,请将 Azure Data Studio 保持打开状态,不过可以继续执行其他操作。 可以随时返回此页面,并选择“停止数据收集”来停止数据收集过程

生成大小合适的建议

如果你已从前一会话或使用其他工具(例如数据库迁移助手)收集了性能数据,则可以选择“我已有性能数据”选项来导入任何现有性能数据。 继续选择性能数据(三个 .csv 文件)保存到的文件夹,然后选择“开始”以启动建议过程

屏幕截图显示了用于导入 SKU 建议性能数据的窗格。

SQL 迁移向导的第一步要求你选择一组要评估的数据库,在建议过程中只会考虑这些数据库。

但是,性能数据收集过程会收集源 SQL Server 实例中所有数据库(而不仅仅是选定的数据库)的性能计数器

这意味着,通过在第一步指定不同的列表,可以使用先前收集的性能数据来反复重新生成针对不同数据库子集的建议。

建议参数

有多个可配置的设置可能会影响建议。

显示建议参数部分的屏幕截图。

选择“编辑参数”选项可根据需要调整这些参数

显示不同建议参数的屏幕截图。

  • 比例因子

    使用此选项可以提供一个缓冲区以应用于每个性能维度。 此选项会考虑季节性使用情况、短期性能历史记录,以及未来使用量可能会增加等问题。 例如,如果确定有一个 4 vCore CPU 需求,且比例因子为 150%,则真正的 CPU 需求将为 6 vCore。

    默认比例因子卷为 100%。

  • 利用率百分比

    聚合要用作性能数据的数据点的百分位数。

    默认值为 95%。

  • 启用预览功能

    使用此选项能够推荐可能尚未向所有区域中的所有用户正式发布的配置。

    此选项默认处于关闭状态。

  • 启用弹性建议

    此选项使用替代建议模型,该模型针对现有的云客户使用个性化的性价比分析。

    此选项默认处于关闭状态。

如果关闭 Azure Data Studio,则将终止数据收集过程。 在该时间点之前收集的数据将保存在文件夹中。

如果在数据收集过程中关闭 Azure Data Studio,请使用以下选项之一重新开始数据收集:

  • 重新打开 Azure Data Studio 并导入保存在本地文件夹中的数据文件。 然后,从收集的数据生成建议。

  • 重新打开 Azure Data Studio,并使用迁移向导重新开始数据收集。

最低权限

若要查询所需的系统视图来收集性能数据,用于此任务的 SQL Server 登录名需要拥有特定的权限。 可以使用以下脚本创建拥有最低特权的用户来收集评估和性能数据:

-- Create a login to run the assessment
USE master;
GO

CREATE LOGIN [assessment]
    WITH PASSWORD = '<STRONG PASSWORD>';

-- Create user in every database other than TempDB and model and provide minimal read-only permissions
EXECUTE sp_MSforeachdb '
   USE [?];
   IF (''?'' NOT IN (''TempDB'',''model''))
   BEGIN TRY
      CREATE USER [assessment] FOR LOGIN [assessment]
   END TRY
   BEGIN CATCH
      PRINT ERROR_MESSAGE()
   END CATCH';

EXECUTE sp_MSforeachdb '
   USE [?];
   IF (''?'' NOT IN (''tempdb'',''model''))
   BEGIN TRY
      GRANT SELECT ON sys.sql_expression_dependencies TO [assessment]
   END TRY
   BEGIN CATCH
      PRINT ERROR_MESSAGE()
   END CATCH';

EXECUTE sp_MSforeachdb '
   USE [?];
   IF (''?'' NOT IN (''tempdb'',''model''))
   BEGIN TRY
      GRANT VIEW DATABASE STATE TO [assessment]
   END TRY
   BEGIN CATCH
      PRINT ERROR_MESSAGE()
   END CATCH';

-- Provide server level read-only permissions
GRANT SELECT ON sys.sql_expression_dependencies TO [assessment];
GRANT SELECT ON sys.sql_expression_dependencies TO [assessment];
GRANT EXECUTE ON OBJECT::sys.xp_regenumkeys TO [assessment];
GRANT VIEW DATABASE STATE TO assessment;
GRANT VIEW SERVER STATE TO assessment;
GRANT VIEW ANY DEFINITION TO assessment;

-- Provide msdb specific permissions
USE msdb;
GO

GRANT EXECUTE ON [msdb].[dbo].[agent_datetime] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysjobsteps] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[syssubsystems] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysjobhistory] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[syscategories] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysjobs] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysmaintplan_plans] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[syscollector_collection_sets] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysmail_profile] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysmail_profileaccount] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysmail_account] TO [assessment];

-- USE master;
-- GO
-- EXECUTE sp_MSforeachdb 'USE [?]; BEGIN TRY DROP USER [assessment] END TRY BEGIN CATCH SELECT ERROR_MESSAGE() END CATCH';
-- DROP LOGIN [assessment];

不支持的方案和限制

  • Azure 建议不包括价格估算,因为这种情况可能因区域、货币和折扣(例如 Azure 混合权益)而异。 若要进行价格估算,请使用 Azure 定价计算器,或者在 Azure Migrate 中创建 SQL 评估

  • 不支持针对采用基于 DTU 的购买模型的 Azure SQL 数据库生成建议。

  • 目前,不支持针对 Azure SQL 数据库无服务器计算层和弹性池生成 Azure 建议。

疑难解答

  • 未生成任何建议
    • 如果未生成任何建议,这种情况可能意味着尚未确定可完全满足源实例性能要求的配置。 若要了解特定大小、服务层级或硬件系列不符合条件的原因,请执行以下操作:
      • 在 Azure Data Studio 中转到“帮助”>“显示所有命令”>“打开扩展日志文件夹”以访问日志
      • 导航到“Microsoft.mssql”>“SqlAssessmentLogs”>“打开 SkuRecommendationEvent.log”
      • 该日志包含已评估的每个潜在配置的跟踪,以及将此配置视为符合条件/不符合条件的原因:显示 SKU 建议日志的屏幕截图。
    • 尝试在启用弹性建议的情况下重新生成建议。 此选项使用替代建议模型,该模型针对现有的云客户使用个性化的性价比分析。