本文概述了管理 Azure SQL 托管实例时发生的不同作。 创建、更新或删除实例时在后端执行的操作称为管理操作。
有关每个管理作的步骤和估计持续时间的详细说明,请查看 管理作持续时间。
管理 Azure SQL 托管实例涉及以下作:
- 创建:首次创建新的 SQL 托管实例时发生的操作。 这包括创建基础虚拟机(VM)组,以及部署 SQL 数据库引擎进程。
- 更新:更改现有 SQL 托管实例的属性(例如缩放计算或存储、更改服务层或更新实例配置)时发生的作。 进行更新通常涉及调整 VM 组的大小,种子设定数据,然后故障切换到新的 SQL 数据库引擎进程。
- 删除:删除现有 SQL 托管实例时发生的作,包括清理与实例关联的 VM 组等资源。
有关每个管理作的步骤和估计持续时间的详细说明,请查看 管理作持续时间。
SQL 托管实例管理作是通过以下基础过程完成的:
- 虚拟机 (VM) 组操作:涉及创建和管理承载 SQL 托管实例的底层 VM 组的操作。 这包括调整 VM 组的大小、创建新 VM 组和管理这些组中的虚拟机。
- 种子设定:通常用于故障转移准备,通过在 SQL 数据库引擎进程之间对数据进行初始化和同步。
- 故障转移:将流量故障转移到另一个 SQL 数据库引擎进程(在同一 VM 组或新 VM 组中)所涉及的操作。
为了支持 Azure 虚拟网络中的部署并为客户提供隔离和安全性,SQL 托管实例依赖于虚拟群集。 虚拟群集表示一组专用的独立虚拟机(VM)部署在虚拟网络子网中,并在 VM 组中组织。 基本上,部署到空子网的每个 SQL 托管实例都会导致形成一个新的虚拟群集,这构建了第一个 VM 组。
SQL 托管实例上的后续管理操作可能会影响基础的 VM 组。 影响基础 VM 组的更改可能会影响管理作的持续时间,因为将更多虚拟机部署到虚拟群集会产生在计划新部署或现有实例更新时需要考虑的开销。
有关虚拟群集体系结构的详细信息,请参阅 虚拟群集体系结构。
在 Azure SQL 托管实例的操作中,种子设定在设置和复制数据库期间起着关键作用。 种子设定是跨 SQL 数据库引擎进程初始化和同步数据的过程,这是实例管理的关键部分。 虽然播种常常是漫长但成功操作中耗时最多的一步,但它是建立健全且功能全面的 SQL 托管实例环境的基础。
有关播种作业的估计持续时间,请参阅管理作业持续时间。
种子设定过程通常涉及以下阶段,无论服务层级如何:
- 初始化:系统标识源数据库和目标数据库,并启动许多任务,这些任务为数据传输准备 SQL 数据库引擎进程。
- 数据传输:实际数据包从源传输到目标 SQL 数据库引擎进程,其中包括数据库的完整副本或部分副本,具体取决于方案。
- 同步:初始数据传输完成后,系统会通过事务日志块的复制同步任何后续更新或更改,以确保数据完整性。
- 验证和最终确定:该过程已完成,并验证目标 SQL 数据库引擎进程以确认成功复制和种子设定。 故障转移发生后,流量会被重新路由到新的 SQL 数据库引擎进程。
除了将服务层级更改为业务关键服务层级时,常规用途服务层级中没有数据种子设定。 常规用途服务层级中的管理作涉及从旧的 SQL 数据库引擎进程分离远程存储并将其附加到新的 SQL 数据库引擎进程。
相反,专为高性能工作负荷设计的 “业务关键 ”服务层级需要本地存储和计算层和存储层的附加性。 因此,此服务层中的几乎所有操作和情景都要求进行数据预载,以确保数据的可用性和一致性。
是否触发种子设定取决于特定方案和服务层级,例如:
-
常规用途 服务层级:
- 更改为业务关键服务层级 - 数据必须从远程存储传输到常规用途服务层级中使用的本地存储。
- 启用或禁用 区域冗余 - 数据必须复制到区域冗余区域或从区域冗余区域复制。
-
业务关键 服务层级:
- 缩放存储:由于存储在物理上附加到本地计算机,因此每个存储更改都需要创建新的 VM 组,因此必须将数据从旧计算机传输到新计算机(在所有 4 个副本上)。
- 缩放 vCores:每个计算缩放操作都需要创建新的 VM 组,因此需要将数据从旧机器复制到新机器(在所有 4 个副本上)。
- 更改硬件或维护时段:如果子网中已存在具有匹配配置的 VM 组,则会调整该 VM 组的大小。 如果这是一个新的配置,则会创建新的 VM 组。 必须将数据从旧 VM 组复制到新 VM 组(在所有 4 个副本上)。
- 更改服务层级:必须将数据从本地存储复制到常规用途服务层级中使用的远程存储。
- 启用或禁用 区域冗余 - 数据必须复制到区域冗余区域或从区域冗余区域复制。
以下因素会影响播种过程的长度:
- 数据库大小:较大的数据库需要更多的时间来跨 SQL 数据库引擎进程传输数据并同步。
- 网络依赖关系:网络带宽和延迟可能会显著影响种子设定速度。
- 备份和还原作:源 SQL 数据库引擎进程中正在进行的备份作可能会影响准备数据以发送到另一个 SQL 数据库引擎进程。
- 实例工作负荷:在种子设定期间的实例工作负荷可能会导致限流并严重延长该过程。
虽然大多数这些因素都超出你的控制范围,但你可以管理实例的流量,以显著提高上传速度。 种子设定使用与管理实例流量相同的实例计算资源。 在播种过程中,繁重的流量可能会降低 vCore 的可用性,导致可用容量不足并引起限流。
种子过程期间的高流量可能会影响同步,因为种子过程旨在通过一次性操作打包和传输当前存储的所有数据。 启动种子设定后到达的旧 SQL 数据库引擎进程的后续数据更改必须通过事务日志块复制以增量方式同步到新的 SQL 数据库引擎进程,之后才能执行故障转移。 如果实例负载过大,种子设定可能会难以跟上传入数据,从而导致同步阶段出现延迟和潜在故障。 启动后,旧 SQL 数据库引擎进程出现持续高流量可能会导致同步阶段无法完成,因为新数据不断到达并必须进行传输。 这可能导致数据传输的持续循环,从而无法故障转移到新的 SQL 数据库引擎进程。
有关播种作业的估计持续时间,请参阅管理作业持续时间。
种子设定是一个无法精确量化或严格预测的过程,因为它依赖于 共享的 Azure 服务。 数据传输和种子设定作取决于整个 Azure 生态系统中共享的各种内部 Azure 服务和基础结构。 这些服务由 Azure 中许多其他不相关的服务使用。 Azure 生态系统中的所有服务都争用可用资源,这会导致受多种因素影响的瞬间可用性波动。 虽然 Azure 可以提供基础结构容量运行的范围,但进行精确的预测具有挑战性。
实例故障转移是将流量从旧的 SQL 数据库引擎进程路由到包含 SQL 托管实例的 VM 组中节点组中的新 SQL 数据库引擎进程的那一刻。 故障转移是大多数管理操作的关键部分,尤其是在更新实例时。 流量重定向到新的 SQL 数据库引擎进程时中断连接的短暂时刻称为故障转移。
只有在故障转移时,当流量被重新路由到新的 SQL 数据库引擎进程时,实例才会不可用。 在Business Critical 服务层级中,实例最多可能会不可用 20 秒,而在General Purpose 服务层级中,实例最多可能会不可用 2 分钟。 由于管理操作(如在业务关键服务层级中重设数据库种子)而为故障转移做准备而发生的任何后端操作都会在后台发生,并且不会影响实例的可用性。
服务层之间的体系结构差异在 可用性方面进行了深入说明。
SQL 托管实例上的管理作可能会影响放置在同一子网中的其他实例的管理作:
在虚拟群集中,长时间运行的还原操作会将同一虚拟群集中的其他操作(如创建或扩展操作)暂停。
例: 如果有长时间运行的还原操作,并且有收缩虚拟机组的操作请求,则收缩请求完成时间更长,因为它必须等待还原操作完成才能继续。
随后的实例创建或缩放操作被搁置,因为之前启动的实例创建或实例缩放已经启动了对 VM 组的调整。
例: 如果同一 VM 组下的同一子网中有多个创建和/或扩展请求,如果其中一个请求启动 VM 组大小调整,则在初始操作请求后 5 分钟提交的所有请求将耗时更长,因为这些请求必须等待大小调整完成后才能继续。
在 1 分钟窗口中提交的创建/缩放操作将被批量并行处理和执行。
例: 对于在1分钟窗口内提交的所有操作(测量从提交第一个操作请求的那一刻开始),仅执行一次虚拟群集大小调整。 如果在提交第一个请求后超过1分钟提交另一个请求,则它会等待虚拟群集重新调整大小,然后再开始执行。
重要
一旦满足继续执行的条件,因另一个正在进行的操作而暂停的管理操作将自动恢复。 无需任何用户操作即可恢复临时暂停的管理操作。
要了解如何监视管理操作进度和状态,请参阅监视 Azure SQL 托管实例管理操作。
若要了解如何取消管理操作,请参阅取消 Azure SQL 托管实例管理操作。