适用于:
Azure SQL 托管实例
本文介绍如何在“常规用途”服务层级上使用 Azure SQL 托管实例时停止和启动实例以节省账单费用。 可以使用 Azure 门户、Azure PowerShell、Azure CLI 或 REST API 停止和启动实例。
注释
停止和启动功能控制计费,不应用作故障排除步骤 重启实例 。
概述
若要节省计费成本,可以在不使用常规用途 SQL 托管实例时停止该实例。 停止实例类似于取消分配虚拟机。 实例处于停止状态时,无需支付计算和许可费用,但仍需支付数据和备份存储费用。
停止 SQL 托管实例会清除所有缓存的数据。
此功能引入了三个新的 SQL 托管实例状态,如下图所示:
发起停止操作后,通常需要大约 5 分钟才能停止实例。 但是,发起启动操作后,启动实例需要大约 20 分钟。 只能停止处于就绪状态的 SQL 托管实例。 停止实例后,它会保持已停止状态,直到发起启动操作(手动发起或通过已定义计划触发)。 只能启动处于已停止状态的实例。
发生以下作时,Azure 会将计算资源分配给基础虚拟群集:
- 创建 SQL 托管实例。
- 启动已停止的 SQL 托管实例。
- 调整 SQL 托管实例的大小。 例如,更改服务层级、存储、硬件生成或 vCore 数。
虽然不断投资更多的基础结构来支持客户需求,但特定区域中对 Azure 服务需求空前增长的偶尔资源分配失败。 如果存在新的虚拟群集生成(根据 管理作持续时间),则这种情况可能会导致长时间的作持续时间,大约 4 小时。 它还可能导致实例启动失败,在这种情况下,应稍后重试。
重要
作为平台即服务 (PaaS) 服务,SQL 托管实例负责系统组件的每一部分的合规性。 如果迫切需要系统维护,则它要求实例处于联机状态。 在这种情况下,Azure 可以启动启动作并将实例保持联机状态,直到维护作完成,此时 Azure 停止实例。 实例处于联机状态的全部时间都会收取计算和许可证费用。
操作类型
可以通过两种方法来停止和启动实例:手动按需或通过创建计划。
手动命令
可以使用手动命令立即触发停止和启动操作。 手动命令适用于长时间不活动且具有常规模式的实例,也适用于测试。 或者,你也可以使用 Azure 自动化计划或任何创建更灵活的自定义计划(无法通过使用 SQL 托管实例中内置的停止和启动计划程序进行设置)的自定义解决方案。
计划的命令
触发停止或启动操作时,还可以创建包含一个或多个多时间点的计划。 计划命令适用于具有常规模式的实例。 例如,在每个工作日上午 8 点启动一个实例,在下午 5 点停止实例,然后在周末上午 7 点启动实例,并在上午 11 点停止该实例。 计划命令无需创建自定义解决方案或 Azure 自动化来创建停止和启动计划。
计划项表示发起停止和启动事件时的时间点,而不是实例启动并运行时的时间点。 创建计划时,请考虑操作持续时间。 例如,如果希望实例在上午 8 点启动并运行,可以定义计划以在上午 7:40 发起启动操作。
针对停止和启动计划,请考虑以下规则:
- 每个计划项都定义为一个停止和启动对,并且必须同时填充 stop 和 start 值。 无法仅填充停止值而不填充启动值,反之亦然。
- 计划对不能重叠。 如果计划时间有重叠,API 将返回错误。
- 任何两个连续操作(即停止后启动或启动后停止)之间的时间跨度必须至少为一小时。 例如,如果计划在上午 10 点启动,则不能计划在上午 11 点之前进行停止操作。
- 如果在触发停止时发生冲突作,例如正在进行缩放 vCore,则机制会在 10 分钟后重试。 如果在 10 分钟后冲突的作仍然处于活动状态,则会跳过停止作。
账单管理
对于停止的实例,不收取 vCore 和 SQL 许可证费用,只收取数据和备份存储费用。 但是,vCore 和许可证费用按每启动小时计费一次。 例如,在 12:01,即使实例在一小时内停止,也将收取整个小时的费用。
Azure 混合权益
Azure 混合权益 (AHB) 按资源应用。 如果实例使用 Azure 混合权益来折扣许可成本,则可以在实例处于停止状态时将 Azure 混合权益应用到另一个资源,必须先在实例上禁用 AHB,然后停止该实例。 同样,在重新启动该实例后,必须在其上重新启用 AHB 以应用许可权益。
停止和启动功能的限制
请考虑以下限制:
- 实例的停止和启动目前仅适用于“常规用途”服务层级上的实例。
- 无法停止具有以下情况的实例:
- 虽然 SQL 托管实例处于停止状态,但无法更改其配置属性。 若要更改任何属性,必须启动实例。
- 实例处于停止状态时,无法进行备份。 例如,假设你配置了长期备份,并已设置年度备份。 如果在定义的年度备份期间停止实例,则会跳过备份。 建议在年度备份期间保持实例正常运行。
- 启动停止或启动作后,无法取消它。
- 如果在停止实例时为 SQL 托管实例计划漏洞评估扫描,则扫描执行会失败。
- 对于处于停止状态的实例,不会发送维护通知。 结果是:
- 通知序列不完整。 例如,不会发送 高级通知 ,同时发送 正在进行的通知 。
- 通知内容中受影响的资源列表中缺少 SQL 托管实例。
- SQL 托管实例中可用的错误日志 不会持久化 ,并在实例停止时自动清除。
先决条件
你的实例必须位于“常规用途”服务层级上,才能使用实例停止和启动功能。
不符合此先决条件的实例,Azure 门户的 SQL 托管实例资源的“概述”页面上,其停止和启动控件处于禁用状态。 将鼠标悬停在控件上可解释实例为何无法使用停止和启动功能。
准备命令行环境
如果使用的是 Azure 门户,请跳过此步骤。
如果要使用 PowerShell 或 Azure CLI 停止或启动实例,则需要通过配置命令行工具和定义参数来准备环境。
若要使用 PowerShell 停止和启动实例,可以 安装 Azure PowerShell。
启动 PowerShell 后,定义参数:
$SubscriptionId = "<Subscription-ID>"
$SqlMIName = "<SQL-MI-name>"
$RgName = "<SQL-MI-resource-group>"
# Login-AzAccount -Environment AzureChinaCloud
Select-AzSubscription -SubscriptionName $SubscriptionID
若要使用 Azure CLI 停止和启动实例,可以 安装 Azure CLI。
subscription="<Subscription-ID>"
instanceName="<SQL-MI-name>"
resourceGroupName="<SQL-MI-resource-group>"
az account set -s $subscription # ...or use 'az login'
有关详细信息,请参阅设置活动订阅或交互方式登录。
停止 SQL 托管实例
可以使用以下服务停止实例:
- Azure 门户
- PowerShell
- Azure CLI (命令行界面)
- 通过任何工具调用的 REST API 调用
若要使用 Azure 门户停止 SQL 托管实例,请转到实例的 “概述 ”页,然后选择“ 停止 ”按钮。
如果实例已停止,则“停止”按钮不可用。
若要使用 PowerShell 停止 SQL 托管实例,请使用 Stop-AzSqlInstance,例如以下示例脚本:
Stop-AzSqlInstance -Name $SqlMIName -ResourceGroupName $RgName
若要使用 Azure CLI 停止 SQL 托管实例,请使用 az sql mi stop,例如以下示例脚本:
az sql mi stop --mi $instanceName -g $resourceGroupName
通过调用托管实例停止 SQL 托管 实例 - 停止 API:
POST
https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
providers/Microsoft.Sql/managedInstances/{managedInstanceName}/stop?api-version=2021-08-01-preview
启动 SQL 托管实例
可以使用以下服务启动实例:
- Azure 门户
- PowerShell
- Azure CLI (命令行界面)
- 通过任何工具调用的 REST API 调用
停止 SQL 托管实例后,若要使用 Azure 门户启动它,请转到实例的 “概述 ”页,然后选择“ 开始 ”按钮。
如果实例已启动,则“启动”按钮不可用。
若要使用 PowerShell 启动 SQL 托管实例,请使用 Start-AzSqlInstance,例如以下示例脚本:
Start-AzSqlInstance -Name $SqlMIName -ResourceGroupName $RgName
若要使用 Azure CLI 启动 SQL 托管实例,请使用 az sql mi start,例如以下示例脚本:
az sql mi start --mi $instanceName -g $resourceGroupName
通过调用 托管实例启动 SQL 托管实例 - 启动 API:
https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
providers/Microsoft.Sql/managedInstances/{managedInstanceName}/start?api-version=2021-08-01-preview
管理停止和启动计划
可以使用以下服务管理停止和启动计划:
- Azure 门户
- PowerShell
- Azure CLI (命令行界面)
- 通过任何工具调用的 REST API 调用
若要使用 Azure 门户管理停止和启动计划,请转到实例,然后在资源菜单中选择“启动/停止计划”。
在“启动/停止计划”窗格上,可以执行以下操作:
- 查看现有计划。
- 在“时区”下拉列表中指定计划事件的时区。
- 选择“创建计划项”以新建计划。
- 选择铅笔图标以修改现有计划。
- 选择垃圾桶图标以删除现有计划。
创建日程安排
若要使用 PowerShell 创建停止和启动 SQL 托管实例的计划,请使用 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 "China Standard Time" -ScheduleList $newSchedule
检查计划
若要检查现有计划,请使用 Get-AzSqlInstanceStartStopSchedule,例如以下示例脚本:
$currentSchedule = Get-AzSqlInstanceStartStopSchedule -InstanceName $SqlMIName -ResourceGroupName $RgName
$scheduleItemsList = $currentSchedule.ScheduleList
$scheduleItemsList
更新时间表
若要更新现有计划以停止和启动 SQL 托管实例,请使用 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 "China Standard Time" -ScheduleList $scheduleItemsList
删除计划
若要删除现有计划,请使用 Remove-AzSqlInstanceStartStopSchedule,例如以下示例脚本:
Remove-AzSqlInstanceStartStopSchedule -InstanceName $SqlMIName -ResourceGroupName $RgName
创建日程安排
若要使用 Azure CLI 创建用于停止和启动 SQL 托管实例的计划,请使用 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="China 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"
更新时间表
若要更新现有计划以停止和启动 SQL 托管实例,请使用 az sql mi start-stop-schedule 更新,例如以下示例脚本:
# 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.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}/startStopSchedules/default?api-version=2022-08-01-preview
{
"properties": {
"timeZoneId": "China 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"
}
]
}
}
检查计划
若要检查现有计划,请调用 启动停止托管实例计划 - 获取 API:
GET
https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
providers/Microsoft.Sql/managedInstances/{managedInstanceName}/startStopSchedules/default?api-version=2022-08-01-preview
删除计划
若要删除现有计划,请调用 启动停止托管实例计划 - 删除 API:
DELETE
https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
providers/Microsoft.Sql/managedInstances/{managedInstanceName}/startStopSchedules/default?api-version=2022-08-01-preview
注释
当前,活动日志仅捕获通过 Azure 资源管理器 (ARM) 启动的操作。 活动日志上不会跟踪计划的启动和停止作。 因此,目前无法通过 Azure 门户中的活动日志查看计划的启动和停止作的历史记录。 或者,通过基于此类日志的任何监视。
相关内容