如何管理超大規模資料庫
本文內容
適用於: Azure SQL 資料庫
此超大規模資料庫服務層級 提供可高度擴增的儲存體和計算效能層,可利用 Azure 結構以擴增 Azure SQL Database 的儲存體和計算資源,而大幅超過一般用途和商務關鍵性服務層級的可用限制。 本文說明如何執行超大規模資料庫的基本管理工作,包括將現有的資料庫移轉至超大規模資料庫、將超大規模資料庫還原至不同的區域、從超大規模資料庫反向移轉至另一個服務層級,以及針對超大規模資料庫監視進行中和最近作業的狀態。
瞭解如何在快速入門:在 Azure SQL Database 中建立超大規模資料庫 中建立新的超大規模資料庫。
提示
簡化的 SQL 資料庫超大規模資料庫於 2023 年 12 月的定價。 如需詳細資料,請檢閱超大規模資料庫價格部落格 。
將現有的資料庫移轉到超大規模資料庫
您可以使用 Azure 入口網站、Azure CLI、PowerShell 或 Transact-SQL,將 Azure SQL Database 中的現有資料庫移轉至超大規模資料庫。
將現有資料庫移至超大規模資料庫所需的時間包含複製資料的時間,以及在複製資料時重新執行來源資料庫所做變更的時間。 資料複製時間與資料大小成正比。 建議您在較低的寫入活動期間移轉至超大規模資料庫,讓重新執行累積變更的時間縮短。
在最後一次完全移轉至超大規模資料庫服務層級期間,您只會經歷短暫的停機,通常是幾分鐘的時間。
必要條件
若要將屬於異地複寫 關聯性的資料庫移至超大規模資料庫 (無論是以主要或次要的形式),您必須先終止主要和次要複本之間的資料複寫。 必須先將容錯移轉群組 中的資料庫從群組中移除。
一旦資料庫移至超大規模資料庫,您就可以為該資料庫建立新的超大規模資料庫異地複本。
不支援從基本服務層級直接移轉至超大規模資料庫服務層級。 若要執行此移轉,請先將資料庫變更為基本以外的任何服務層級(例如一般用途),然後繼續進行超大規模資料庫移轉。
如何將資料庫移轉至超大規模資料庫服務層級
若要將 Azure SQL Database 中的現有資料庫移轉至超大規模資料庫服務層級,請先識別目標服務目標。 如果您不確定哪個服務目標適合資料庫,請檢閱單一資料庫的資源限制 。 在許多案例下,您可以選擇具有相同虛擬核心數目的服務目標,以及與原始資料庫相同的硬體世代。 如有需要,您只要最短停機時間就能變更服務物件 。
選取慣用工具的索引標籤,以移轉資料庫:
Azure 入口網站可讓您藉由修改資料庫的定價層,來移轉至超大規模資料庫服務層級。
瀏覽至您想要在 Azure 入口網站中移轉的資料庫。
在左導覽列中,選取 [計算 + 儲存]。
選取 [服務層級 ] 下拉式清單,以展開服務層級的選項。
從下拉式選單功能表中選取 [超大規模資料庫 (隨選可調整儲存體) ]。
檢閱列出的硬體組態 。 如有需要,請選取 [變更組態],為您的工作負載選取適當的硬體設定。
如果您想要變更超大規模資料庫服務層級下資料庫可用的虛擬核心數目,請選取 [虛擬核心] 滑桿。
如果您想要變更超大規模資料庫服務層級下的複本數目,請選取 [High-AvailabilitySecondaryReplicas] 滑桿。
選取 [套用]。
您可以在作業進行時監視超大規模資料庫的作業 。
此程式碼範例會呼叫 az sql db update ,將 Azure SQL Database的現有資料庫移轉至超大規模資料庫服務層級。 您必須同時指定版本和服務目標。
在執行下列程式碼範例之前,請先將 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 Database 中的現有資料庫移轉至超大規模資料庫服務層級。 您必須同時指定版本和服務目標。
在執行此程式碼範例之前,請先將 $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 Database 中現有資料庫移轉至超大規模資料庫服務層級的客戶在緊急情況下移轉回來。 雖然反向移轉是由服務層級變更所起始,但其基本上是不同結構之間的資料大小移動。
反向移轉的限制
反向移轉可在下列情況下使用:
只有在原始移轉至超大規模資料庫 45 天內,才能進行反向移轉。
因此在超大規模資料庫服務層級中原始建立的資料庫,不符合反向移轉的資格。
您只能反向移轉至一般用途 服務層級。 從超大規模資料庫至一般用途的移轉可以鎖定無伺服器或佈建的計算層。 如果您想要將資料庫移轉至另一個服務層級,例如業務關鍵 或以 DTU 為基礎的服務層級 ,請先反向移轉至一般用途服務層級,然後變更服務層級。
不支援反向移轉至虛擬核心少於 2 的資料庫。 移轉完成後,可以將資料庫縮減為少於 2 個虛擬核心。
不支援直接往返反向移轉至彈性集區。 您只能將超大規模資料庫單一資料庫反向移轉至一般用途的單一資料庫。
如果超大規模資料庫是超大規模資料庫彈性集區 的一部分,您必須先從超大規模資料庫彈性集區中將其移除,再進行反向移轉。
完成反向移轉之後,您可視需要選擇性將一般用途單一資料庫新增至一般用途彈性集區。
如果資料庫不符合反向移轉資格,從超大規模資料庫移轉至非超大規模資料庫服務層級的唯一方法是使用 bacpac 檔案或其他資料移動技術 (大量複製、Azure Data Factory、Azure Databricks、SSIS 等) 來匯出/匯入、透過 Azure 入口網站進行 Bacpac 匯出/匯入、透過 PowerShell 使用 New-AzSqlDatabaseExport 或 New-AzSqlDatabaseImport、透過 Azure CLI 使用az sql db export 和 az sql db import,但不支援透過 REST API 進行此作業。 若是較小的超大規模資料庫 (最高 150 GB),則支援使用 SSMS 和 SqlPackage 18.4 和更新版本進行 Bacpac 匯出/匯入。 若是較大型資料庫,bacpac 匯出/匯入可能需要很長的時間,也可能因各種原因而失敗。
持續時間和停機
不同於超大規模資料庫中的一般服務等級目標變更作業,移轉至超大規模資料庫和反向移轉至一般用途是資料大小作業。
反向移轉作業的持續時間主要取決於資料庫的大小,以及移轉期間發生的並行寫入活動。 您指派給目標一般用途資料庫的虛擬核心數目也會影響反向移轉的持續時間。 建議您佈建目標一般用途資料庫,其虛擬核心數目大於或等於指派給來源超大規模資料庫以維持類似工作負載的虛擬核心數目。
在反向移轉期間,如果負載過大,來源超大規模資料庫可能會遇到效能降低的情況。 具體而言,交易記錄速率可能會降低 (節流),以確保反向移轉正在進行。
在最後一次完全移轉至新的目標一般用途資料庫期間,您將經歷短暫的停機,通常是幾分鐘的時間。
必要條件
在起始從超大規模資料庫到一般用途服務層級的反向移轉之前,您必須確定資料庫符合反向移轉的限制 ,以及:
您的資料庫未啟用異地複寫。
您的資料庫沒有具名複本。
您的資料庫 (配置的大小) 夠小,足以容納目標服務層級。
如果您為目標一般用途資料庫指定資料庫大小上限,請確定資料庫的配置大小夠小,足以容納該大小上限。
在反向移轉作業開始之前,會進行必要條件檢查。 如果不符合必要條件,反向移轉作業會立即失敗。
備份原則
對於設定的保留期間 內所有現有資料庫備份,系統會使用一般定價 來向您收費。 您需支付以下兩者的費用:超大規模資料庫備份儲存體快照集,以及必須保留才能還原備份的資料大小儲存體 Blob。
您可以將資料庫移轉至超大規模資料庫,並多次反向移轉至一般用途。 只有資料庫目前層和前一層的備份才能進行還原。 如果您已從一般用途服務層級移至超大規模資料庫,並回到一般用途,唯一可用的備份是目前一般用途資料庫和緊接在之前超大規模資料庫的備份。 系統會根據 Azure SQL Database 計費計算這些保留備份的費用。 任何先前嘗試的層都不會有可用的備份,且不會計費。
例如,您可以在超大規模資料庫和非超大規模資料庫服務層級之間移轉:
一般用途
移轉至超大規模資料庫
反向移轉至一般用途
服務層級變更為業務關鍵
移轉至超大規模資料庫
反向移轉至一般用途
在此案例下,如果備份仍在設定的保留期間 內,唯一可用的備份會來自時間軸的步驟 5 和 6。 先前步驟中的任何備份都無法使用。 嘗試在超大規模資料庫和一般用途服務層級之間進行重複移轉時,請謹慎考慮備份的可用性。 一旦啟動反向移轉後,早於先前資料庫的資料庫備份就會變為無法使用,即使取消移轉仍無法使用。
如何將超大規模資料庫反向移轉至一般用途服務層級
若要將 Azure SQL Database 中現有的超大規模資料庫反向移轉至一般用途服務層級,請先找出一般用途服務層級中的目的地服務目標,以及您是否想要移轉至已佈建或無伺服器計算層。 如果您不確定哪個服務目標適合資料庫,請檢閱單一資料庫的資源限制 。
如果您想要在反向移轉至一般用途之後執行額外的服務層級變更,請同時識別最終目標服務目標,並確保資料庫的配置大小夠小,足以符合該服務目標。
選取慣用方法的索引標籤,以反向移轉資料庫:
Azure 入口網站可讓您藉由修改資料庫的定價層,來反向移轉至一般用途服務層級。
瀏覽至您想要在 Azure 入口網站中移轉的資料庫。
在左導覽列中,選取 [計算 + 儲存]。
選取 [服務層級 ] 下拉式清單,以展開服務層級的選項。
從下拉式清單功能表中選取 [一般用途 (可調整的計算和儲存體選項) ]。
檢閱列出的硬體組態 。 如有需要,請選取 [變更組態],為您的工作負載選取適當的硬體設定。
如果您想要變更一般用途服務層級下資料庫可用的虛擬核心數目,請選取 [虛擬核心] 滑桿。
選取 [套用]。
此程式碼範例會呼叫 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 伺服器 上的 master
資料庫。
您必須在 ALTER DATABASE 陳述式中同時指定版本和服務目標。
此範例陳述式會將名為 mySampleDatabase
的資料庫移轉至具有 GP_Gen5_4
服務目標的一般用途服務層級。 在執行陳述式之前,請先將資料庫名稱和服務目標取代為適當的值。
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 Database 進行中或最近完成的作業狀態。
選取您慣用方法的索引標籤,以監視作業。
當移轉、反向移轉或還原等作業正在進行時,Azure 入口網站會顯示 Azure SQL Database 中資料庫的通知。
瀏覽至 Azure 入口網站中的資料庫。
在左導覽列中,選取 [概觀]。
檢閱右窗格底部的 [通知] 區段。 如果作業正在進行中,則會顯示通知方塊。
選取通知方塊以檢視詳細資料。
[進行中的作業 ] 窗格開啟。 檢閱進行中作業的詳細資料。
此程式碼範例會呼叫 az sql db op list ,以傳回 Azure SQL Database 中資料庫的最新或進行中作業。
在執行下列程式碼範例之前,請先將 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 Database 中資料庫的最新或進行中作業。
在執行範例程式碼之前,請先將 $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 或您選擇執行 Transact-SQL 命令的用戶端,連線至邏輯伺服器 上的 master
資料庫。
查詢 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
檢閱版本 資料行,以識別超大規模資料庫服務層級中的資料庫。
相關內容
在下列文章中深入瞭解超大規模資料庫: