你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
停止和启动实例 - Azure SQL 托管实例
本文内容
适用于: Azure SQL 托管实例
本文介绍如何在“常规用途”服务层级上使用 Azure SQL 托管实例 时停止和启动实例以节省账单费用。 可以使用 Azure 门户、Azure PowerShell、Azure CLI 或 REST API 停止和启动实例。
注意
停止和启动功能用于控制计费,不应将其用作故障排除步骤来重启实例 。
概述
若要节省账单费用,可以在不使用常规用途托管实例时停止它。 停止实例类似于取消分配虚拟机。 实例处于停止状态时,无需支付计算和许可费用,但仍需支付数据和备份存储费用。
停止托管实例会清除所有缓存数据。
此功能引入了三种新的托管实例状态,如下图所示:
发起停止操作后,通常需要大约 5 分钟才能停止实例。 但是,发起启动操作后,启动实例需要大约 20 分钟。 只能停止处于就绪状态的托管实例。 停止实例后,它会保持已停止状态,直到发起启动操作(手动发起或通过已定义计划触发)。 只能启动处于已停止状态的实例。
创建托管实例、开始已停止的托管实例或针对托管实例重设大小(例如更改服务层级、存储、硬件生成或 vCore 数),Azure 会将计算资源分配给基础虚拟群集。 虽然我们有对额外基础设施的持续投资来支持客户需求,但特定区域中 Azure 服务需求前所未有的增长可能会偶尔出现资源分配故障。 这可能会导致长时间的操作持续时间(如果存在新的虚拟群集扩展则约为 4 小时,具体依照管理操作持续时间 )或启动实例失败(在这种情况下,应稍后重试)。
重要
作为平台即服务 (PaaS) 服务,SQL 托管实例负责系统组件的每一部分的合规性。 如果系统需要紧急维护,要求实例联机,则 Azure 可以发起启动操作,并保持实例联机,直到维护操作完成,此时 Azure 会停止实例。 实例处于联机状态的全部时间都会收取计算和许可证费用。
操作类型
可以通过两种方法来停止和启动实例:手动按需或通过创建计划。
手动命令
可以使用手动命令立即触发停止和启动操作。 手动命令适用于长时间不活动且具有常规模式的实例,也适用于测试。 或者,你也可以使用 Azure 自动化计划 或任何创建更灵活的自定义计划(无法通过使用 SQL 托管实例中内置的停止和启动计划程序进行设置)的自定义解决方案。
计划的命令
触发停止或启动操作时,还可以创建包含一个或多个多时间点的计划。 计划命令适用于具有常规模式的实例,例如在每个工作日上午 8 点启动实例,下午 5 点停止实例,然后在周末上午 7 点启动实例,上午 11 点停止实例。 计划命令无需创建自定义解决方案或 Azure 自动化来创建停止和启动计划。
计划项表示发起停止和启动事件时的时间点,而不是实例启动并运行时的时间点。 创建计划时,请考虑操作持续时间。 例如,如果希望实例在上午 8 点启动并运行,可以定义计划以在上午 7:40 发起启动操作。
针对停止和启动计划,请考虑以下规则:
计划项被定义为停止和启动对,且必须同时填充停止和启动值。 无法仅填充停止值而不填充启动值,反之亦然。
计划对不能有重叠。 如果计划时间有重叠,API 将返回错误。
任何两个连续操作(即停止后启动或启动后停止)之间的时间跨度必须至少为一小时。 例如,如果计划在上午 10 点启动,则不能计划在上午 11 点之前进行停止操作。
如果触发停止时存在冲突操作(例如正在缩放 vCore),则该机制将在 10 分钟后重试。 如果 10 分钟后冲突操作仍然处于活动状态,则跳过停止操作。
计费
对于停止的实例,不收取 vCore 和 SQL 许可证费用,只收取数据和备份存储费用。 但是,vCore 和许可证费用按每启动小时计费一次。 例如,在 12:01,即使实例在一小时内停止,也将收取整个小时的费用。
Azure 混合权益
Azure 混合权益 (AHB) 按资源应用。 如果实例使用 Azure 混合权益来节省许可成本,则要在实例处于已停止状态时将该权益应用到另一个资源,必须先禁用实例上的 AHB,然后停止该实例。 同样,在重新启动该实例后,必须在其上重新启用 AHB 以应用许可权益。
预留实例定价
预留实例定价(预留容量) 与触发的 vCore 数和小时数相关。 符合预留定价条件的实例停止时,预留定价会自动重定向到另一个实例(如果存在)。 可以使用停止和启动功能过度预配预留实例定价。
例如,假设你购买了一个预留容量为 16 个 vCore 的托管实例。 可以在下午 1 点到下午 2 点运行两个具有 8 个 vCore 的实例,停止两个实例,然后从下午 2 点到下午 3 点运行两个具有 8 个 vCore 的不同实例。 此方法将每小时消耗 16 个 vCore 限制,总共分布在四个实例之间。
预留折扣以“使用或丢失” 为基础提供。 也就是说,如果指定小时没有匹配的资源,则会丢失该小时的预留数量。 未使用的预留小时数不能结转。
停止和启动功能的限制
请考虑以下限制:
实例的停止和启动目前仅适用于“常规用途”服务层级上的实例。
无法停止具有以下情况的实例:
当托管实例处于停止状态时,无法更改其配置属性。 若要更改任何属性,必须启动实例。
实例处于停止状态时,无法进行备份。 例如,假设你配置了长期备份 ,并已设置年度备份。 如果在定义的年度备份期间停止实例,则会跳过备份。 建议在年度备份期间保持实例正常运行。
启动停止或启动操作后,无法取消该操作。
如果针对 SQL 托管实例和实例计划漏洞评估扫描,并且实例已停止,则扫描操作仍将启动,扫描执行将失败。
对于处于停止状态的实例,不会触发维护通知 。 此结果为:
通知序列不完整(例如,未发送高级通知,发送了正在进行的通知)。
通知内容中受影响的资源列表中缺少 SQL 托管实例。
SQL 托管实例中可用的错误日志不会持久 ,并在实例停止时自动清除。
先决条件
你的实例必须位于“常规用途”服务层级上,才能使用实例停止和启动功能。
不符合此先决条件的实例,Azure 门户的 SQL 托管实例资源的“概述 ”页面上,其停止和启动控件处于禁用状态。 将鼠标悬停在控件上可看到实例无法使用该功能的原因。
准备命令行环境
如果使用的是 Azure 门户,请跳过此步骤。
如果要使用 PowerShell 或 Azure CLI 停止或启动实例,则需要通过配置命令行工具以及定义参数来准备环境。
或者,若要配置命令行工具,也可以使用 Azure Cloud Shell,这是免费的交互式 shell,可用于运行本文中的步骤。 它预安装有常用 Azure 工具并将其配置与帐户一起使用。 如果没有 Azure 订阅 ,请在开始之前创建一个 Azure 免费帐户 。
若要打开 Cloud Shell,请从代码块的右上角选择试一试 。 也可以通过转到 https://shell.azure.com 在单独的浏览器标签页中启动 Cloud Shell。
若要使用 PowerShell 停止和启动实例,可以安装 Azure PowerShell ,或使用 Azure Cloud Shell。
当 Cloud Shell 打开时,请验证是否为环境选择了“PowerShell”。 后续会话在 PowerShell 环境中使用 Azure CLI。 选择复制 以复制代码块,将其粘贴到 Cloud Shell 中,然后按 Enter 来运行它。
启动 PowerShell 或 Cloud Shell 后,定义参数:
$SubscriptionId = "<Subscription-ID>"
$SqlMIName = "<SQL-MI-name>"
$RgName = "<SQL-MI-resource-group>"
# Login-AzAccount
Select-AzSubscription -SubscriptionName $SubscriptionID
若要使用 Azure CLI 停止和启动实例,可以安装 Azure CLI ,或使用 Azure Cloud Shell。
当 Cloud Shell 打开时,请验证是否为环境选择了Bash 。 后续会话将在 Bash 环境中使用 Azure CLI。 选择复制 以复制代码块,将其粘贴到 Cloud Shell 中,然后按 Enter 来运行它。
Cloud Shell 会在登录时使用的初始帐户下自动进行身份验证。 使用以下脚本通过其他订阅登录,将 <Subscription ID>
替换为 Azure 订阅 ID。
subscription="<Subscription-ID>"
instanceName="<SQL-MI-name>"
resourceGroupName="<SQL-MI-resource-group>"
az account set -s $subscription # ...or use 'az login'
有关详细信息,请参阅设置有效的订阅 或以交互方式登录 。
停止托管实例
可以使用以下服务停止实例:
Azure 门户
PowerShell
Azure CLI
通过任何工具调用 REST API 调用
若要使用 Azure 门户 停止托管实例,请转到实例的“概述” 页并选择“停止” 按钮。
如果实例已停止,则“停止”按钮不可用。
若要使用 PowerShell 停止托管实例,请使用 Stop-AzSqlInstance ,例如以下示例脚本:
Stop-AzSqlInstance -Name $SqlMIName -ResourceGroupName $RgName
若要使用 Azure CLI 停止托管实例,请使用 az sql mi stop ,例如以下示例脚本:
az sql mi stop --mi $instanceName -g $resourceGroupName
通过调用 SQL 托管实例 - 停止 API 停止托管实例:
POST
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
providers/Microsoft.Sql/managedInstances/{managedInstanceName}/stop?api-version=2021-08-01-preview
启动托管实例
可以使用以下服务启动实例:
Azure 门户
PowerShell
Azure CLI
通过任何工具调用 REST API 调用
停止托管实例后,若要启动它,可以使用 Azure 门户 ,请转到实例的“概述” 页并选择“启动” 按钮。
如果实例已启动,则“启动”按钮不可用。
若要使用 PowerShell 启动托管实例,请使用 Start-AzSqlInstance ,例如以下示例脚本:
Start-AzSqlInstance -Name $SqlMIName -ResourceGroupName $RgName
若要使用 Azure CLI 启动托管实例,请使用 az sql mi start ,例如以下示例脚本:
az sql mi start --mi $instanceName -g $resourceGroupName
通过调用 SQL 托管实例 - 启动 API 启动托管实例:
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
providers/Microsoft.Sql/managedInstances/{managedInstanceName}/start?api-version=2021-08-01-preview
管理停止和启动计划
可以使用以下服务管理停止和启动计划:
Azure 门户
PowerShell
Azure CLI
通过任何工具调用 REST API 调用
若要使用 Azure 门户 管理停止和启动计划,请转到实例,然后在资源菜单中选择“启动/停止计划” 。
在“启动/停止计划”窗格上,可以执行以下操作:
查看现有计划。
在“时区”下拉列表中指定计划事件的时区。
选择“创建计划项”以新建计划。
选择铅笔图标以修改现有计划。
选择垃圾桶图标以删除现有计划。
创建日程安排
若要使用 PowerShell 创建停止和启动托管实例的计划,请使用 New-AzSqlInstanceStartStopSchedule 和 New-AzSqlInstanceScheduleItem ,例如以下示例脚本:
$newSchedule = [System.Collections.ArrayList]::new()
$newScheduleMonday = New-AzSqlInstanceScheduleItem -StartDay Monday -StopDay Monday -StartTime "09:00" -StopTime "17:00"
$newSchedule.add($newScheduleMonday)
$newScheduleTuesday = New-AzSqlInstanceScheduleItem -StartDay Tuesday -StopDay Tuesday -StartTime "09:00" -StopTime "17:00"
$newSchedule.add($newScheduleTuesday)
$newScheduleWednesday = New-AzSqlInstanceScheduleItem -StartDay Wednesday -StopDay Wednesday -StartTime "07:00" -StopTime "19:00"
$newSchedule.add($newScheduleWednesday)
$newScheduleThursday = New-AzSqlInstanceScheduleItem -StartDay Thursday -StopDay Thursday -StartTime "09:00" -StopTime "17:00"
$newSchedule.add($newScheduleThursday)
$newScheduleFriday = New-AzSqlInstanceScheduleItem -StartDay Friday -StopDay Friday -StartTime "11:00" -StopTime "17:00"
$newSchedule.add($newScheduleFriday)
New-AzSqlInstanceStartStopSchedule -InstanceName $SqlMIName -ResourceGroupName $RgName -TimeZone "Central Europe Standard Time" -ScheduleList $newSchedule
检查计划
若要检查现有计划,请使用 Get-AzSqlInstanceStartStopSchedule ,例如以下示例脚本:
$currentSchedule = Get-AzSqlInstanceStartStopSchedule -InstanceName $SqlMIName -ResourceGroupName $RgName
$scheduleItemsList = $currentSchedule.ScheduleList
$scheduleItemsList
更新计划
若要更新停止和启动托管实例的现有计划,请使用 New-AzSqlInstanceStartStopSchedule 和 New-AzSqlInstanceScheduleItem ,例如以下示例脚本:
$currentSchedule = Get-AzSqlInstanceStartStopSchedule -InstanceName $SqlMIName -ResourceGroupName $RgName
$scheduleItemsList = $currentSchedule.ScheduleList
# Remove Thursday item
$scheduleItemsList = $scheduleItemsList | Where-Object { $_.StartDay -ne "Thursday" }
# Adjust Friday item
$fridaySchedule = $scheduleItemsList | Where-Object { $_.StartDay -eq "Friday" }
$fridaySchedule.StartTime = "09:00"
# Add new Thursday item
$newScheduleThursday = New-AzSqlInstanceScheduleItem -StartDay Thursday -StopDay Thursday -StartTime "12:00" -StopTime "18:00"
$scheduleItemsList += $newScheduleThursday
# Update schedule with new configuration
New-AzSqlInstanceStartStopSchedule -InstanceName $SqlMIName -ResourceGroupName $RgName -TimeZone "Central Europe Standard Time" -ScheduleList $scheduleItemsList
删除计划
若要删除现有计划,请使用 Remove-AzSqlInstanceStartStopSchedule ,例如以下示例脚本:
Remove-AzSqlInstanceStartStopSchedule -InstanceName $SqlMIName -ResourceGroupName $RgName
创建日程安排
若要使用 Azure CLI 创建停止和启动托管实例的计划,请使用 az sql mi start-stop-schedule create ,例如以下示例脚本:
scheduleItems="[{'startDay':'Monday','startTime':'10:00','stopDay':'Monday','stopTime':'18:00'},{'startDay':'Tuesday','startTime':'10:00','stopDay':'Tuesday','stopTime':'18:00'},{'startDay':'Wednesday','startTime':'12:00','stopDay':'Wednesday','stopTime':'22:00'},{'startDay':'Thursday','startTime':'14:00','stopDay':'Thursday','stopTime':'20:00'},{'startDay':'Friday','startTime':'14:00','stopDay':'Friday','stopTime':'20:00'}]"
timezone="Central Europe Standard Time"
az sql mi start-stop-schedule create --mi "$instanceName" -g "$resourceGroupName" --timezone-id "$timezone" --schedule-list "$scheduleItems"
检查计划
若要检查现有计划,请使用 az sql mi start-stop-schedule show ,例如以下示例脚本:
az sql mi start-stop-schedule show --mi "$instanceName" -g "$resourceGroupName"
更新计划
若要更新停止和启动托管实例的现有计划,请使用 az sql mi start-stop-schedule update ,例如以下示例脚本:
# append an item
newScheduleItem="{'startDay':'Friday','startTime':'09:00 PM','stopDay':'Friday','stopTime':'11:00 PM'}"
az sql mi start-stop-schedule update --mi $instanceName -g $resourceGroupName --add schedule_list "$newScheduleItem"
# remove an item
#items in list are indexed (0 based)
az sql mi start-stop-schedule update --mi $instanceName -g $resourceGroupName --remove schedule_list 2
删除计划
若要删除现有计划,请使用 az sql mi start-stop-schedule delete ,例如以下示例脚本:
az sql mi start-stop-schedule delete --mi "$instanceName" -g "$resourceGroupName"
创建或更新计划
若要创建或更新停止和启动托管实例的计划,请调用启动/停止 SQL 托管实例计划 - 创建或更新 API 并调整正文内容以匹配计划:
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}/startStopSchedules/default?api-version=2022-08-01-preview
{
"properties": {
"timeZoneId": "Central European Standard Time",
"description": "This is a schedule for our Dev/Test environment.",
"scheduleList": [
{
"startDay": "Monday",
"startTime": "07:30",
"stopDay": "Wednesday",
"stopTime": "17:00"
},
{
"startDay": "Thursday",
"startTime": "15:00",
"stopDay": "Friday",
"stopTime": "15:00"
}
]
}
}
检查计划
若要检查现有计划,请调用启动/停止 SQL 托管实例计划 - 获取 API:
GET
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
providers/Microsoft.Sql/managedInstances/{managedInstanceName}/startStopSchedules/default?api-version=2022-08-01-preview
删除计划
若要删除现有计划,请调用启动/停止 SQL 托管实例计划 - 删除 API:
DELETE
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
providers/Microsoft.Sql/managedInstances/{managedInstanceName}/startStopSchedules/default?api-version=2022-08-01-preview
注意
当前,活动日志仅捕获通过 Azure 资源管理器 (ARM) 启动的操作。 活动日志中不会跟踪计划的启动和停止操作。 因此,目前无法通过 Azure 门户中的活动日志或通过基于此类日志的任何监视来查看计划的启动和停止操作的历史记录。
后续步骤