如何管理超大规模数据库
Artículo 12/18/2024
2 colaboradores
Comentarios
En este artículo
适用于:Azure SQL 数据库
“超大规模”服务层级 提供了一个高度可缩放的存储和计算性能层,它利用 Azure 体系结构来横向扩展 Azure SQL 数据库的存储和计算资源,远远超出了“常规用途”和“业务关键”服务层级的可用限制。 本文介绍如何执行超大规模数据库的基本管理任务,包括将现有数据库迁移到超大规模、将超大规模数据库还原到不同的区域、从超大规模反向迁移到另一个服务层级,以及监视正在对超大规模数据库进行的操作和最近的操作状态。
了解如何在快速入门:在 Azure SQL 数据库中创建超大规模数据库 中创建新的超大规模数据库。
提示
2023 年 12 月针对 SQL Database(超大规模)的简化定价。 有关详情,请查看超大规模定价博客 。
将现有数据库迁移到超大规模
可以使用 Azure 门户、Azure CLI、PowerShell 或 Transact-SQL 将 Azure SQL 数据库中的现有数据库迁移到超大规模。
将现有数据库移动到超大规模所需的时间包含复制数据所需的时间,以及在复制数据期间重播在源数据库中进行的更改所需的时间。 数据复制时间与数据大小成正比。 建议在写入活动较少的时间段内迁移到超大规模,这样重播累积更改所需的时间就会缩短。
在最终直接转换为“超大规模”服务层级期间,只会出现很短的停机时间,通常是几分钟。
先决条件
要将作为异地复制 关系的一部分的数据库(作为主数据库或辅助数据库)移动到超大规模,需要先终止主副本和辅助副本之间的数据复制。 故障转移组 中的数据库必须先从组中删除。
将数据库移动到“超大规模”后,你可以为该数据库创建新的“超大规模”异地副本。
不支持从基本服务层直接迁移到“超大规模”服务层级。 若要执行此迁移,请先将数据库更改为“基本”以外的任何服务层级(例如“常规用途”),然后继续迁移到“超大规模”。
如何将数据库迁移到“超大规模”服务层级
要将 Azure SQL 数据库中的现有数据库迁移到“超大规模”服务层级,请先确定目标服务目标。 如果不确定哪个服务目标适合数据库,请查看单一数据库的资源限制 。 在许多情况下,可以选择与原始数据库具有相同的 vCore 数目和相同的硬件代系的服务目标。 如果需要,可以在最短的停机时间内更改服务目标 。
选择你的首选工具的选项卡来迁移数据库:
使用 Azure 门户,可以通过修改数据库的定价层迁移到“超大规模”服务层级。
导航到要在 Azure 门户中迁移的数据库。
在左导航栏中,选择“计算 + 存储 ”。
选择“服务层 ”下拉列表,展开服务层级的选项。
从下拉列表菜单中选择“超大规模(按需可缩放存储) ”。
查看列出的“硬件配置 ”。 如果需要,可以选择“更改配置 ”,为工作负载选择适当的硬件配置。
如果要更改“超大规模”服务层级下适用于数据库的 vCore 数目,请选择“vCores ”滑块。
如果要更改“超大规模”服务层级下的副本数,请选择“High-AvailabilitySecondaryReplicas ”滑块。
选择应用 。
当操作正在进行时,你可以监视超大规模数据库的操作 。
此代码示例调用 az sql db update ,将 Azure SQL 数据库中的现有数据库迁移到“超大规模”服务层级。 必须指定版本和服务目标。
在运行以下代码示例之前,将 resourceGroupName
、serverName
、databaseName
和 serviceObjective
替换为相应的值:
resourceGroupName="myResourceGroup"
serverName="server01"
databaseName="mySampleDatabase"
serviceObjective="HS_Gen5_2"
az sql db update -g $resourceGroupName -s $serverName -n $databaseName \
--edition Hyperscale --service-objective $serviceObjective
当操作正在进行时,你可以监视超大规模数据库的操作 。
下面的示例使用 Set-AzSqlDatabase cmdlet 将 Azure SQL 数据库中的现有数据库迁移到“超大规模”服务层级。 必须指定版本和服务目标。
在运行此代码示例之前,将 $resourceGroupName
、$serverName
、$databaseName
和 $serviceObjective
替换为相应的值:
$resourceGroupName = "myResourceGroup"
$serverName = "server01"
$databaseName = "mySampleDatabase"
$serviceObjective = "HS_Gen5_2"
Set-AzSqlDatabase -ResourceGroupName $resourceGroupName -ServerName $serverName `
-DatabaseName $databaseName -Edition "Hyperscale" `
-RequestedServiceObjectiveName $serviceObjective
当操作正在进行时,你可以监视超大规模数据库的操作 。
从超大规模反向迁移
通过反向迁移到“常规用途”服务层级,最近将 Azure SQL 数据库中的现有数据库迁移到“超大规模”服务层级的客户可以在紧急情况下迁移回来,前提是超大规模无法满足他们的需求。 虽然反向迁移是由服务层级更改发起的,但它本质上是不同体系结构之间的数据规模的移动。
反向迁移的限制
反向迁移在以下条件下适用:
反向迁移仅在原始迁移到超大规模的 45 天内可用。
最初在“超大规模”服务层级中创建的数据库不符合反向迁移的条件。
只能反向迁移到常规用途 服务层级。 从“超大规模”迁移到“常规用途”可以是无服务器或预配的计算层。 如果要将数据库迁移到另一个服务层级(例如业务关键 或基于 DTU 的服务层级 ),请先反向迁移到“常规用途”服务层级,然后更改服务层级。
不支持反向迁移到少于 2 个 vCore 的数据库。 迁移完成后,可以将数据库缩减到少于 2 个 vCore。
不支持从弹性池或到弹性池的直接反向迁移。 只能将超大规模单一数据库反向迁移到常规用途单一数据库。
如果超大规模数据库是超大规模弹性池 的一部分,则必须先将其从超大规模弹性池中删除,然后再进行反向迁移。
反向迁移完成后,可以选择将常规用途的单一数据库添加到常规用途弹性池(如果需要)。
对于不符合反向迁移条件的数据库,从“超大规模”迁移到非“超大规模”服务层级的唯一方法是,使用 bacpac 文件或其他数据移动技术(批量复制、Azure 数据工厂、Azure Databricks、SSIS 等)进行导出/导入。不支持从 Azure 门户、PowerShell(使用 New-AzSqlDatabaseExport 或 New-AzSqlDatabaseImport)、Azure CLI(使用 az sql db export 和 az sql db import)以及从 REST API 进行 bacpac 导出/导入。 支持使用 SSMS 和 SqlPackage 版本 18.4 及更高版本对较小的超大规模数据库(最多 150 GB)进行 bacpac 导入/导出。 对于较大的数据库,bacpac 导出/导入可能需要很长时间,并且可能会因各种原因失败。
持续时间和停机时间
与“超大规模”中的常规服务级别目标更改操作不同,迁移到“超大规模”和反向迁移到“常规用途”是数据规模的操作。
反向迁移操作的持续时间主要取决于数据库的大小以及在迁移期间发生的并发写入活动数量。 你分配给目标常规用途数据库的 vCore 数目也会影响反向迁移的持续时间。 我们建议,为目标常规用途数据库预配的 vCore 数目大于或等于分配给源超大规模数据库的 vCore 数目,以维持类似的工作负载。
在反向迁移期间,如果负载很大,源超大规模数据库可能会出现性能下降。 具体而言,系统可能会降低(限制)事务日志速率,以确保反向迁移正常进行。
在最终直接转换为新的目标常规用途数据库期间,只会出现较短的停机时间,通常是几分钟。
先决条件
在启动从“超大规模”到“常规用途”服务层级的反向迁移之前,必须确保数据库符合反向迁移的限制 ,并且:
数据库没有启用异地复制。
数据库没有命名副本。
数据库(分配的大小)足够小,可以装入目标服务层级。
如果为目标常规用途数据库指定了最大的数据库大小,请确保数据库的已分配大小足够小,可以适应该最大大小。
在反向迁移操作开始之前,会进行先决条件检查。 如果不满足先决条件,反向迁移操作将立即失败。
备份策略
在配置的保留期 内,你将为所有现有数据库备份支付使用常规定价收取的费用 。 你将为超大规模备份存储快照和必须保留的数据大小存储 blob 支付费用,这样才能还原备份。
你可以将数据库迁移到“超大规模”,并多次反向迁移回“常规用途”。 只有数据库当前层级和上一层级的备份才可用于还原。 如果你已从“常规用途”服务层级迁移到“超大规模”,然后又迁移回“常规用途”,那么只有来自当前常规用途数据库和上一个“超大规模”数据库的备份可用。 这些保留的备份根据 Azure SQL 数据库的计费方式计费。 以前尝试的任何层级都没有可用备份,并且不会计费。
例如,可以在超大规模和非超大规模服务层级之间迁移:
常规用途
迁移到超大规模
反向迁移到常规用途
服务层级更改为业务关键
迁移到超大规模
反向迁移到常规用途
在这种情况下,唯一可用的备份来自时间线的第 5 步和第 6 步(如果备份仍在配置的保留期 内)。 以前的步骤中的任何备份都不可用。 尝试在“超大规模”和“常规用途”服务层级之间反复迁移相同的数据库时,请慎重考虑备份的可用性。 启动反向迁移后,早于上一个数据库的数据库备份会立即变得不可用,即使取消迁移,仍然不可用。
如何将超大规模数据库反向迁移到“常规用途”服务层级
若要将 Azure SQL 数据库中的现有超大规模数据库反向迁移到“常规用途”服务层级,请先确定“常规用途”服务层级中的目标服务目标,以及是否要迁移到预配的或无服务器计算层。 如果不确定哪个服务目标适合数据库,请查看单一数据库的资源限制 。
如果要在反向迁移到常规用途后执行其他服务层级更改,请同时确定最终目标服务目标,并确保数据库的已分配大小足够小,可以容纳在该服务目标中。
选择你的首选方法的选项卡来反向迁移数据库:
使用 Azure 门户,可以通过修改数据库的定价层反向迁移到“常规用途”服务层级。
导航到要在 Azure 门户中迁移的数据库。
在左导航栏中,选择“计算 + 存储 ”。
选择“服务层 ”下拉列表,展开服务层级的选项。
从下拉列表菜单中选择“常规用途(可缩放的计算和存储选项) ”。
查看列出的“硬件配置 ”。 如果需要,可以选择“更改配置 ”,为工作负载选择适当的硬件配置。
如果要更改“常规用途”服务层级下适用于数据库的 vCore 数目,请选择“vCores ”滑块。
选择应用 。
此代码示例调用 az sql db update ,将现有超大规模数据库反向迁移到“常规用途”服务层级。 必须指定版本和服务目标。 可以选择 Provisioned
或 Serverless
作为目标计算模式。
在运行以下代码示例之前,将 resourceGroupName
、serverName
、databaseName
和 serviceObjective
替换为相应的值:
resourceGroupName="myResourceGroup"
serverName="server01"
databaseName="mySampleDatabase"
serviceObjective="GP_Gen5_2"
computeModel="Provisioned"
az sql db update -g $resourceGroupName -s $serverName -n $databaseName \
--edition GeneralPurpose --service-objective $serviceObjective \
--compute-model $computeModel
可以选择包含 maxsize
参数。 如果 maxsize
值超过目标服务目标的有效最大大小,系统会返回一个错误。 如果没有指定 maxsize
参数,操作将默认为适合给定服务目标的最大大小。 以下示例指定 maxsize
:
resourceGroupName="myResourceGroup"
serverName="server01"
databaseName="mySampleDatabase"
serviceObjective="GP_Gen5_2"
computeModel="Provisioned"
maxsize="200GB"
az sql db update -g $resourceGroupName -s $serverName -n $databaseName \
--edition GeneralPurpose --service-objective $serviceObjective \
--compute-model $computeModel --max-size $maxsize
当操作正在进行时,你可以监视超大规模数据库的操作 。
此代码示例使用 Set-AzSqlDatabase cmdlet,将现有数据库从“超大规模”服务层级反向迁移到“常规用途”服务层级。 必须指定版本和服务目标。 可以选择 Provisioned
或 Serverless
作为目标计算层级。
在运行此代码示例之前,将 $resourceGroupName
、$serverName
、$databaseName
、$serviceObjective
和 $computeModel
替换为相应的值:
$resourceGroupName = "myResourceGroup"
$serverName = "server01"
$databaseName = "mySampleDatabase"
$serviceObjective = "GP_Gen5_2"
$computeModel = "Provisioned"
Set-AzSqlDatabase -ResourceGroupName $resourceGroupName -ServerName $serverName `
-DatabaseName $databaseName -Edition "GeneralPurpose" -computemodel $computeModel `
-RequestedServiceObjectiveName $serviceObjective
可以选择包含 maxsize
参数。 如果 maxsize
值超过目标服务目标的有效最大大小,系统会返回一个错误。 如果没有指定 maxsize
参数,操作将默认为适合给定服务目标的最大大小。 以下示例指定 maxsize
:
$resourceGroupName = "myResourceGroup"
$serverName = "server01"
$databaseName = "mySampleDatabase"
$serviceObjective = "GP_Gen5_2"
$computeModel = "Provisioned"
$maxSizeBytes = "268435456000"
Set-AzSqlDatabase -ResourceGroupName $resourceGroupName -ServerName $serverName `
-DatabaseName $databaseName -Edition "GeneralPurpose" -computemodel $computeModel `
-RequestedServiceObjectiveName $serviceObjective -MaxSizeBytes $maxSizeBytes
当操作正在进行时,你可以监视超大规模数据库的操作 。
要使用 Transact-SQL 将超大规模数据库迁移到“常规用途”服务层级,请先使用 SQL Server Management Studio (SSMS) 、Azure Data Studio 连接到逻辑 SQL Server 上的 master
数据库。
必须在 ALTER DATABASE 语句中指定版本和服务目标。
此示例语句使用 GP_Gen5_4
服务目标将名为 mySampleDatabase
的数据库迁移到“常规用途”服务层级。 在执行语句之前,将数据库名称和服务目标替换为相应的值。
ALTER DATABASE [mySampleDatabase]
MODIFY (EDITION = 'GeneralPurpose', SERVICE_OBJECTIVE = 'GP_Gen5_2');
GO
可以选择包含 maxsize
参数。 如果 maxsize
值超过目标服务目标的有效最大大小,系统会返回一个错误。 如果没有指定 maxsize
参数,操作将默认为适合给定服务目标的最大大小。 以下示例指定 maxsize
:
ALTER DATABASE [mySampleDatabase]
MODIFY (EDITION = 'GeneralPurpose', SERVICE_OBJECTIVE = 'GP_Gen5_2', MAXSIZE = 200 GB);
GO
当操作正在进行时,你可以监视超大规模数据库的操作 。
监视超大规模数据库的操作
你可以使用 Azure 门户、Azure CLI、PowerShell 或 Transact-SQL 监视正在对 Azure SQL 数据库进行的操作或最近已完成的操作的状态。
选择你的首选方法的选项卡来监视操作。
当迁移、反向迁移或还原等操作正在进行时,Azure 门户会显示 Azure SQL 数据库中数据库的通知。
在 Azure 门户中导航到数据库。
在左侧导航栏中,选择“概述 ”。
查看右窗格底部的“通知 ”部分。 如果操作正在进行,将显示一个通知框。
选中通知框可以查看详细信息。
此时将打开正在进行的操作 窗格。 可以查看正在进行的操作的详细信息。
此代码示例调用 az sql db op list ,返回 Azure SQL 数据库中数据库的最近操作或正在进行的操作。
在运行以下代码示例之前,将 resourceGroupName
、serverName
、databaseName
和 serviceObjective
替换为相应的值:
resourceGroupName="myResourceGroup"
serverName="server01"
databaseName="mySampleDatabase"
az sql db op list -g $resourceGroupName -s $serverName --database $databaseName
Get-AzSqlDatabaseActivity cmdlet 返回 Azure SQL 数据库中数据库的最近操作或正在进行的操作。
在运行示例代码之前,将 $resourceGroupName
、$serverName
和 $databaseName
参数设置为适当的值:
$resourceGroupName = "myResourceGroup"
$serverName = "server01"
$databaseName = "mySampleDatabase"
Get-AzSqlDatabaseActivity -ResourceGroupName $resourceGroupName -ServerName $serverName -DatabaseName $databaseName
要监视超大规模数据库的操作,请先使用 SQL Server Management Studio (SSMS) 、Azure Data Studio 或你选择的客户端连接到逻辑服务器 上的 master
数据库,以运行 Transact- SQL 命令。
查询 sys.dm_operation_status 动态管理视图,以查看有关对 [逻辑服务器](logical-servers.md] 上的数据库执行的最近操作的信息。
此代码示例返回指定数据库的 sys.dm_operation_status
中的所有条目,按最近开始的操作排序。 在运行代码示例之前,将数据库名称替换为相应的值。
SELECT *
FROM sys.dm_operation_status
WHERE major_resource_id = 'mySampleDatabase'
ORDER BY start_time DESC;
GO
查看“超大规模”服务层级中的数据库
将数据库迁移到“超大规模”或重新配置“超大规模”服务层级中的数据库后,可能需要查看和/或记录超大规模数据库的配置。
Azure 门户显示了逻辑服务器 上所有数据库的列表。 定价层 列包括每个数据库的服务层级。
在 Azure 门户中导航到逻辑服务器 。
在左侧导航栏中,选择“概述 ”。
滚动到窗格底部的资源列表。 该窗口将显示逻辑服务器上的 SQL 弹性池和数据库。
查看“定价层 ”列以标识“超大规模”服务层级中的数据库。
此 Azure CLI 代码示例调用 az sql db list ,列出逻辑服务器 上的超大规模数据库,其中包含名称、位置、服务级别目标、最大大小和高可用性副本数。
在运行以下代码示例之前,将 resourceGroupName
和 serverName
替换为相应的值:
resourceGroupName="myResourceGroup"
serverName="server01"
az sql db list -g $resourceGroupName -s $serverName --query "[].{Name:name, Location:location, SLO:currentServiceObjectiveName, Tier:currentSku.tier, maxSizeBytes:maxSizeBytes,HAreplicas:highAvailabilityReplicaCount}[?Tier=='Hyperscale']" --output table
Azure PowerShell Get-AzSqlDatabase cmdlet 返回逻辑服务器 上的超大规模数据库列表,其中包含名称、位置、服务级别目标、最大大小和高可用性副本数。
在运行示例代码之前,将 $resourceGroupName
和 $serverName
参数设置为适当的值:
$resourceGroupName = "myResourceGroup"
$serverName = "server01"
Get-AzSqlDatabase -ResourceGroupName $resourceGroupName -ServerName $serverName | `
Where-Object { $_.Edition -eq 'Hyperscale' } | `
Select-Object DatabaseName, Location, currentServiceObjectiveName, Edition, `
MaxSizeBytes, HighAvailabilityReplicaCount | `
Format-Table
查看“版本 ”列以标识“超大规模”服务层级中的数据库。
相关内容
在以下文章中详细了解超大规模数据库: