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

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

适用于 Azure Data StudioAzure SQL 迁移扩展可帮助你评估数据库要求,获取适用于 Azure 资源的适当大小的 SKU 建议,并将 SQL Server 数据库迁移到 Azure。

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

概述

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

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

Diagram that shows the workflow of the SKU recommendation process.

注意

适用于 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 数据库
    • 硬件系列:标准系列(Gen5)
    • 服务层级:常规用途、业务关键、超大规模
  • Azure SQL 托管实例
    • 硬件系列:标准系列(Gen5)、高级版系列、高级版系列内存优化
    • 服务层级:常规用途、业务关键
  • 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 数据库使用的缓存的总大小(以兆字节为单位) 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 建议”。 选择“立即收集性能数据”,然后选择计算机上将保存收集的数据的文件夹。

Screenshot that shows the wizard pane to collect performance data for SKU recommendations.

重要

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

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

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

通常会在所选文件夹中看到一组 CSV 文件,其中包含以下后缀:

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

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

生成大小正确的建议

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

Screenshot that shows the pane to import performance data for a SKU recommendation.

注意

SQL 迁移向导的步骤之一要求你选择要评估的数据库集,这些数据库是建议过程中唯一要考虑的数据库。

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

这意味着,以前收集的性能数据可用于重复重新生成针对不同数据库子集的建议,方法是在步骤 1 上指定不同的列表。

建议参数

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

Screenshot that shows the recommendation parameters section.

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

Screenshot that shows the different recommendation parameters.

  • 比例因子
    此选项允许提供一个缓冲区,以应用于每个性能维度。 此选项考虑到了季节性使用情况、短性能历史记录以及将来使用可能增加的问题。 例如,如果确定有一个 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
      • 该日志包含已评估的每个潜在配置的跟踪,以及未被视为符合条件的配置的原因: Screenshot that shows SKU recommendations log.
    • 尝试重新生成已启用 弹性建议的建议 。 此选项使用备用建议模型,该模型利用针对现有云客户的个性化性价比分析。

后续步骤