停止和啟動執行個體 - Azure SQL 受控執行個體
本文內容
適用於: Azure SQL 受控執行個體
本文說明在您使用 Azure SQL 受控執行個體時,如何停止和啟動執行個體以節省計費成本。 您可以使用 Azure 入口網站、Azure PowerShell、Azure CLI 或 REST API 停止和啟動執行個體。
注意
受控執行個體的停止和啟動功能僅適用於一般用途服務層級中的 SQL 受控執行個體。
概觀
為節省計費成本,當您不使用一般用途受控執行個體時,您可以停止受控執行個體。 停止執行個體與解除配置虛擬機器類似。 當執行個體處於停止狀態時,系統不會向您收取計算和授權費用,但您仍需支付資料和備份儲存體費用。
停止受控執行個體會清除所有的快取資料。
這項功能引進三個新的受控執行個體狀態,如以下圖表所示:
起始停止作業之後,執行個體通常需要大約 5 分鐘才會停止。 然而,啟動執行個體從起始啟動作業算起,需要大約 20 分鐘。 只能停止處於就緒狀態的受控執行個體。 停止執行個體之後,執行個體會維持在已停止狀態,直到手動起始啟動作業,或使用已定義的排程觸發以起始啟動作業為止。 只能啟動處於已停止狀態的執行個體。
當您建立受控執行個體、啟動已停止的受控執行個體,或調整受控執行個體的大小時 (例如變更服務層級、儲存體、硬體產生或虛擬核心數目),Azure 會將計算資源配置給基礎虛擬叢集。 雖然持續投資於額外的基礎結構來支援客戶需求,但在特定區域,可能會因為 Azure 服務需求的快速成長偶爾發生資源分派失敗。 這可能會導致長時間的作業期間 (根據管理作業期間 ,如果有新的虛擬叢集組建,約為 4 小時),或無法啟動執行個體,在此情況下,您應該稍後再試一次。
重要
SQL 受控執行個體作為平台即服務 (PaaS) 服務的一部分,會負責系統元件中每個組件的合規性。 如果有緊急的系統維護需求,需要讓執行個體上線,Azure 可以起始啟動作業,並保持執行個體為線上狀態直到維護作業完成,Azure 此時才會停止執行個體。 執行個體處於線上狀態的全部時間,將適用計算和授權費用。
動作類型
有兩種方式可以停止和啟動執行個體:隨需手動或建立排程。
手動命令
您可以使用手動命令立即觸發停止和啟動動作。 手動命令適用於無活動期較長且無定期模式的執行個體,或用於測試用途。 或者,您可以使用 Azure 自動化排程 或任何自訂解決方案,建立無法使用 SQL 受控執行個體中內建停止和啟動排程器進行設定的自訂且更具彈性的排程。
排程的命令
您也可以建立一個排程,其中包含一或多個觸發停止或啟動動作的時間點。 排程的命令適用於具有定期模式的執行個體,例如每個工作日上午 8 點啟動執行個體,下午 5 點停止執行個體,然後週末上午 7 點啟動執行個體,上午 11 點停止執行個體。 排程您的命令不需要您建立自訂解決方案,或使用 Azure 自動化建立停止和啟動排程。
排程項目代表起始停止和啟動事件的時間點,不是執行個體啟動並執行的時間。 當您建立排程時,請將作業的持續時間納入考量。 例如,如果您想要讓執行個體在上午 8 點啟動並執行,您可以定義在上午 7:40 起始啟動作業的排程。
針對停止和啟動排程,請考慮下列規則:
排程項目以停止和啟動為一組進行定義,而且兩者都必須填入停止和啟動值。 不能已填入停止值卻遺漏啟動值,反之亦然。
不能與已排程的組別重疊。 如果與排程的時間重疊,API 會傳回錯誤。
任兩個連續動作之間的時間範圍 (也就是在停止之後啟動,或在啟動之後停止) 必須至少一小時。 例如,如果啟動的排程為上午 10 點,則不能將停止動作排程在上午 11 點之前。
如果觸發停止時發生衝突 (例如調整正在執行的虛擬核心),系統機制會在 10 分鐘後重試。 如果 10 分鐘之後,仍有發生衝突的作業,則會略過停止作業。
計費
已停止的執行個體不會針對虛擬核心和 SQL 授權計費,只需要支付資料和備份儲存體費用。 不過,虛擬核心和授權計費是以每個「已啟動」小時進行收費。 例如,在 12:01 時,即使執行個體在該小時內停止,您仍需支付整個小時的費用。
Azure Hybrid Benefit
每個資源都會套用 Azure Hybrid Benefit (AHB) 。 如果您的執行個體使用 Azure Hybrid Benefit 節省授權成本,若要在執行個體處於已停止狀態時,將其權益套用至另一個資源,您必須先停用執行個體上的 AHB,再停止執行個體。 同樣地,重新啟動執行個體之後,您必須重新啟用執行個體上的 AHB,才能套用其授權權益。
保留執行個體定價
保留執行個體定價 (保留容量) 會套用至發出的虛擬核心和小時數。 當符合保留定價資格的執行個體停止時,系統會自動將保留定價重新導向至另一個執行個體 (如果有的話)。 您可以使用停止和啟動功能,額外佈建 保留執行個體定價。
例如,假設您已購買保留容量為 16 個虛擬核心的受控執行個體。 您可以在下午 1 點到下午 2 點執行兩個具有 8 個虛擬核心的執行個體、停止這兩個執行個體,然後在下午 2 點到下午 3 點執行兩個各具 8 個虛擬核心的不同執行個體。 此方法會取用您 16 個虛擬核心的每小時限制,總計分散到四個執行個體。
保留折扣以「不用則作廢 」為基準。 也就是說,如果您在指定的小時內沒有相符的資源,則該小時的保留數量就作廢。 未使用的保留時數無法移轉。
停止和啟動功能的限制
請考慮下列限制:
您無法停止下列狀態的執行個體:
當受控執行個體處於已停止狀態,您無法變更其設定屬性。 若要變更任何屬性,您必須啟動執行個體。
當執行個體處於已停止狀態,您無法進行備份。 例如,假設您已設定就地每年備份的長期備份 。 如果您在已定義的每年備份期間停止執行個體,則會略過該備份。 建議您在每年備份期間,保持執行個體為啟動並執行的狀態。
起始停止或啟動作業之後就無法取消。
如果針對 SQL 受控執行個體和執行個體排程了弱點評定掃描,則掃描作業仍會起始,掃描執行將會失敗。
不會針對處於已停止狀態的實例引發維護通知 。 使用下列結果:
未完成的通知排序 (例如,不會傳送進階通知,進行中通知已傳送)。
通知內容中受影響的資源清單中遺漏 SQL 受控執行個體。
SQL 受控執行個體中可用的錯誤記錄不會保存, 而且會在執行個體停止時自動清除。
必要條件
若要使用執行個體停止和啟動功能,您的執行個體必須符合一般用途服務層級。
不符合必要條件的執行個體不會在 Azure 入口網站的 SQL 受控執行個體資源的 [概觀] 頁面上看到停止和啟動控件。 將滑鼠停留在控制措施上會說明執行個體無法使用此功能的原因。
準備命令列環境
如果您使用 Azure 入口網站,請略過此步驟。
如果您想要使用 PowerShell 或 Azure CLI 停止或啟動執行個體,您需要藉由設定命令列工具並定義參數來準備環境。
或者,若要設定命令列工具,您也可以使用 Azure Cloud 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 訂用帳戶識別碼。
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 受控執行個體 - Stop 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 受控執行個體 - Start 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"
建立或更新排程
若要建立或更新排程以停止和啟動受控執行個體,請呼叫 Start Stop SQL Managed Instance Schedules - Create Or Update 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"
}
]
}
}
檢查排程
若要檢查現有的排程,請呼叫 Start Stop SQL Managed Instance Schedules - Get API:
GET
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
providers/Microsoft.Sql/managedInstances/{managedInstanceName}/startStopSchedules/default?api-version=2022-08-01-preview
刪除排程
若要刪除現有的排程,請呼叫 Start Stop SQL Managed Instance Schedules - Delete API:
DELETE
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
providers/Microsoft.Sql/managedInstances/{managedInstanceName}/startStopSchedules/default?api-version=2022-08-01-preview
注意
目前,活動記錄只會擷取透過 Azure Resource Manager (ARM) 起始的作業。 排程的開始和停止作業不會在活動記錄上追蹤。 因此,目前無法透過 Azure 入口網站中的活動記錄,或透過任何以這類記錄為基礎的監視,來檢視已排程的啟動和停止作業的歷程記錄。
下一步