确定适合本地数据库的 Azure SQL 数据库、Azure SQL 托管实例或 Azure VM 上的 SQL Server 的 SKU

将数据库迁移到云可能会比较复杂。 尤其是在尝试为数据库选择 Azure SQL 数据库、SQL 托管实例或 Azure VM 上的 SQL Server 的最佳目标和 SKU 时。 数据库迁移助手 (DMA) 以简单易懂的输出方式提供这些 SKU 建议,从而帮助解决这些问题,并使数据库迁移体验更加轻松。 使用性能数据 DMA 现在可以推荐合适的目标 Azure SQL SKU,并提供建议说明。

通过 SKU 建议功能,可以从托管数据库的源 SQL Server 实例收集性能数据,并根据收集的数据推荐 Azure SQL 数据库、Azure SQL 托管实例或 Azure VM 上的 SQL Server 的最低 SKU。 此功能提供与定价层、计算级别和数据大小相关的建议。 此功能目前只能通过命令行接口 (CLI) 使用。

以下说明可帮助你确定 SKU 建议,并使用 DMA 在 Azure 中预配相应的数据库。

备注

如果要大规模评估 VMware 上的整个 SQL Server 数据资产,请使用 Azure Migrate 获取 Azure SQL 部署建议、目标规模调整和每月估算。

先决条件

  • 下载并安装最新版本的 DMA。 如果已安装早期版本的 DMA,请将其打开,系统会提示你升级 DMA。
  • 在运行 SKU 建议控制台应用程序的工具计算机上安装最低版本 .NET Core 6.0
  • 确保用于连接到 SQL Server 本地源的帐户具有 sysadmin 权限。

注意

为了最大程度地减少任何潜在的开销,建议从连接到目标 SQL 实例的单独工具(客户端)计算机使用该工具,而不是从托管 SQL Server 本身的计算机使用。 收集 SKU 建议的性能数据时,建议使用默认选项值运行该工具数小时,需要涵盖非高峰和高峰工作负载,并排除重新生成索引或备份数据库等维护任务。 维护任务可能会影响 CPU、内存和 IO 消耗,从而导致推荐较高的 SKU 层。

收集性能数据

收集的数据包括有关服务器硬件配置的有限信息,以及系统动态管理视图 (DMV) 中聚合的特定于 SQL 的性能数据,例如 CPU、内存、存储使用情况、IO 吞吐量和 IO 延迟。 收集的数据存储在计算机本地,用于进一步聚合和分析。 分析了源实例的性能特征,使针对 Azure SQL 产品/服务(包括 SQL 数据库、SQL 托管实例和 Azure VM 上的 SQL)提供的 SKU 建议最适合工作负载,同时经济高效。

在 DMA 安装路径中,找到 SQLAssessmentConsole 文件夹和 SqlAssessment.exe 应用程序。

Screenshot of SKUConsoleApplication.exe file shown in DMA installation folder location.

若要启动数据收集过程,请在控制台应用程序中指定 PerfDataCollection 操作,并使用以下参数:

  • sqlConnectionStrings:(必需)引号括起来的目标 SQL 实例正式连接字符串。
  • perfQueryIntervalInSec(可选):查询性能数据的间隔(以秒为单位)。 (默认值:30)。
  • staticQueryIntervalInSec(可选):查询和暂留静态配置数据的间隔(以秒为单位)。 (默认值:60)。
  • numberOfIterations(可选):在暂留到文件之前要执行的性能数据收集迭代次数。 例如,使用默认值,性能数据将每 10 分钟(= 30 秒 * 20 次迭代)暂留一次。 (默认值:20)。
  • outputFolder(可选):将在其中写入/读取性能数据、报告和日志的文件夹。 (默认值:%LocalAppData%/Microsoft/SqlAssessmentConsole)。

下面是一个示例调用:

.\SqlAssessment.exe PerfDataCollection
--sqlConnectionStrings "Data Source=Server1;Initial Catalog=master;Integrated Security=True;" "Data Source=Server2;Initial Catalog=master;Integrated Security=True;"
--outputFolder C:\Output

或者,可以在 JSON 配置文件中提供适当的参数,并通过运行不含操作的可执行文件将该配置文件传递给工具,从而调用数据收集过程,如下所示:

.\SqlAssessment.exe --configFile C:\path\to\config.json

下面的示例 ConfigFile 等效于以前描述的性能数据收集操作:

  {
    "action": "PerfDataCollection",
    "sqlConnectionStrings": [
    "Data Source=Server1;Initial Catalog=master;Integrated Security=True;",
    "Data Source=Server2;Initial Catalog=master;Integrated Security=True;"
    ],
    "outputFolder": "C:\\Output"
  }

可以在 DMA 安装路径下的 Example 文件夹中找到所有操作的示例配置文件:GetMetadataSampleConfigFile.json、PerfDataCollectionSampleConfigFile.json 和 GetSkuRecommendationSampleConfigFile.json。

执行命令后,针对每个目标实例,将性能和配置数据点保存为一组三个 *_Counters.csv 文件,每个文件都包含服务器和实例名。 可以将此文件用作该过程下一部分的输入,这将提供针对 Azure SQL 数据库、Azure SQL 托管实例或 Azure VM 上的 SQL Server 的 SKU 建议。

使用控制台应用程序获取 SKU 建议

上一步骤中收集的数据点用作 SKU 建议过程的输入。

对于单一数据库选项,DMA 针对 Azure SQL 数据库单一数据库层、计算级别以及 SQL 实例上每个数据库的推荐存储配置提供建议。

对于 Azure SQL 托管实例和 Azure VM 上的 SQL Server,建议支持直接迁移方案。 因此,SKU 建议控制台应用可以针对 Azure SQL 托管实例或 Azure VM 上的 SQL Server 层、计算级别以及 SQL 实例上数据库集的推荐存储配置提供建议。 还可以仅指定一部分要包含在 SKU 建议中或从 SKU 建议中排除的数据库。

GetSkuRecommendation 默认使用基线策略,将收集的工作负载的代表性性能数据值(基于指定的百分位值)对应到合适的 Azure SQL SKU。 我们还提供了一种弹性策略(统计方法),该策略根据已迁移到 Azure SQL 的客户模型分析工作负载模式,从而基于收集的性能数据生成唯一的性价比曲线。

若要启动 SKU 建议过程,请在控制台应用程序中使用以下参数指定 GetSkuRecommendation 操作:

  • perfQueryIntervalInSec(可选):查询性能数据的间隔(以秒为单位)。 注意:提供的值必须与最初在性能数据收集期间使用的值一致。 (默认值:30
  • targetPlatform(可选):SKU 建议的目标平台:AzureSqlDatabaseAzureSqlManagedInstanceAzureSqlVirtualMachineAny。 选择 Any 可以评估针对三个目标平台的 SKU 建议,并返回最合适的建议。 (默认值:Any
  • targetSqlInstance(可选):SKU 建议针对的 SQL 实例的名称。 (默认:扫描 outputFolder 是否存在由 PerfDataCollection 操作创建的文件,并为找到的每个实例提供建议)
  • targetPercentile(可选):聚合性能数据期间要使用的数据点的百分位。 仅用于基线(非弹性)策略。 仅用于基线(非弹性)策略。 (默认值:95
  • scalingFactor(可选):在 SKU 建议过程中使用的缩放(“舒适”)因子。 例如,如果确定有一个 4-vCore CPU 需求,且缩放因子为 150%,则真正的 CPU 需求将为 6 vCore。 (默认值:100
  • startTime(可选):聚合期间要考虑的性能数据点的 UTC 开始时间,采用 yyyy-MM-dd HH:mm 格式。 仅用于基线(非弹性)策略。 (默认:考虑收集的所有数据点)
  • endTime(可选):聚合期间要考虑的性能数据点的 UTC 结束时间,采用 yyyy-MM-dd HH:mm 格式。 仅用于基线(非弹性)策略。 (默认:考虑收集的所有数据点)
  • elasticStrategy(可选):是否根据资源使用情况分析和性价比分析针对 SKU 建议使用弹性策略。 弹性策略目前可用于 Azure SQL 数据库和 SQL 托管实例,但尚不可用于 Azure VM 上的 SQL Server 目标。 (默认值:false
  • databaseAllowList(可选):SKU 建议注意事项中要允许的数据库名称的空格分隔列表,同时排除了所有其他数据库。 仅设置以下一项或都不设置:databaseAllowList、databaseDenyList。 (默认值:null
  • databaseDenyList(可选):SKU 建议中要排除的数据库名称的空格分隔列表。 仅设置以下一项或都不设置:databaseAllowList、databaseDenyList。 (默认值:null
  • overwrite(可选):是否覆盖任何现有 SKU 建议报告。 (默认值:true
  • displayResult(可选):是否将 SKU 建议结果输出到控制台。 (默认值:true
  • outputFolder(可选):要在其中写入/读取性能数据、报告和日志的文件夹。 (默认值:%LocalAppData%\Microsoft\SqlAssessment
  • suppressPreviewFeatures(可选):如果设置为 true,则建议中不包含任何处于预览期的 Azure 功能。 (默认值:false

可以在根目录的 Console.Settings.json 文件中找到 SKU 建议的高级设置。 目前,它包含以下可自定义参数:

CommandTimeoutGroupSetting:在超时之前等待执行 SQL 查询命令的时间(以秒为单位)。

  • PerfCollectionCommandTimeout:与性能数据收集相关的可能长时间运行的查询命令超时(默认值:300)
  • DefaultCollectionCommandTimeout:所有其他查询的命令超时(默认值:120

ThrottlingGroupSetting:基于计算机上的内核数创建的并行任务数

  • ServerInstancesParallelCount:要并行评估的服务器实例数(默认值:2
  • DatabasesParallelCount:要并行评估的数据库数(默认值:4
  • UserDefinedObjectsParallelCountPerDb:每个数据库要并行评估的用户定义对象(存储过程、视图、触发器等)数(默认值:4

AllowTelemetry:是否允许收集匿名功能使用情况和诊断数据并将其传输到 Microsoft。 (默认值:true

或者,可以在 JSON 配置文件中提供适当的参数,并通过运行不含操作的可执行文件将该配置文件传递给工具,从而调用 SKU 建议过程,如下所示:

.\SqlAssessment.exe --configFile C:\path\to\config.json

以下 ConfigFile 等效于以前所述的 SKU 建议操作:

{
    "action": "GetSkuRecommendation",
    "outputFolder": "C:\\Output",
    "targetPlatform": "AzureSqlDatabase",
    "targetSqlInstance": "Server1",
    "targetPercentile": 95,
    "scalingFactor": 100,
    "startTime": "2020-01-01 00:00",
    "endTime": "2022-01-01 00:00",
    "perfQueryIntervalInSec": 30,
    "overwrite": "true"
}

若要获取针对特定 Azure SQL 平台的 SKU 建议,而不是自动选择一个平台,请提供 --targetPlatform 选项的值,如下所示:

示例 1:获取针对 Azure SQL 数据库的 SKU 建议。

.\SqlAssessment.exe GetSkuRecommendation
--outputFolder C:\Output
--targetPlatform AzureSqlDatabase

示例 2:获取针对 Azure SQL 托管实例使用弹性策略的 SKU 建议。

.\SqlAssessment.exe GetSkuRecommendation
--outputFolder C:\Output
--targetPlatform AzureSqlManagedInstance
--elasticStrategy true

示例 3:获取针对 Azure SQL 虚拟机的 SKU 建议。

.\SqlAssessment.exe GetSkuRecommendation
--outputFolder C:\Output
--targetPlatform AzureSqlVirtualMachine

示例 4:获取针对 Azure SQL 虚拟机和取消预览功能的 SKU 建议。

.\SqlAssessment.exe GetSkuRecommendation
--outputFolder C:\Output
--targetPlatform AzureSqlVirtualMachine
--suppressPreviewFeatures True

下面的屏幕截图是对 Azure SQL 数据库建议的示例输出:

Screenshot of Azure SQL Database SKU tier and sizing recommendations shown in SQLAssessment console.

下面的屏幕截图是 Azure SQL 托管实例建议的示例输出:

Screenshot of Azure SQL Managed Instance SKU tier and size recommendations shown in console.

下面的屏幕截图是 Azure VM 上的 SQL Server 建议的示例输出:

Screenshot of SQL Server on Azure VM SKU tier and size recommendations output shown in console.

SKU 建议的输出同时保存为 JSON 格式的详细报告和易于阅读的汇总 HTML 文件。 输出涵盖以下部分:

  • 实例名称:本地 SQL Server 实例的名称。
  • 数据库名称:本地 SQL Server 数据库的名称。
  • SKU 建议:在性能足可满足工作负载需求的所有 SKU 中最经济实惠的 SKU 产品/服务。
  • 建议原因:针对建议的每个层级,我们提供了促成该建议的原因和收集的数据值。

最终建议层级和该层级的配置值反映了在 Azure 中运行成功率近似本地数据库的查询所需的最低 SKU。

后续步骤