作 者:楊先民
審 稿:張智凱
擴展你的 Azure SQL Database
您可以輕鬆地自動或手動擴展或縮小Azure SQL資料庫。 縮放有兩種類型:垂直或是水平。
垂直擴展是指切換到更高或更低的服務層,或垂直劃分資料,以將不同的架構存儲在不同的資料庫中。
水平縮放是指將單個表中的數據劃分為不同的單個資料庫。 本文將教您如何自動縮放Azure SQL資料庫和切片資料庫。
有時間的話還會討論並且了解如何運行跨資料庫查詢。
先介紹垂直縮放,垂直縮放可以有兩種類型:向上或向下縮放服務層,或垂直分區。
向上擴展或向下擴展服務層向上擴展服務層是指切換到更高的服務層。例如,從基本S0切換到標準S0或從標準S0切換到標準S1。
縮減服務層是指切換到較低的服務層。例如,從標準S1切換到標準S0,或從標準S0切換到基本。
擴展服務層可讓您在繁忙的工作時間內維護或提高資料庫的性能,而縮減服務層可讓您在非工作時間節省成本。
可以在零停機時間內即時更改服務層。
將服務層更改請求發送到Azure SQL資料庫時,它首先在請求的服務層中創建資料庫的副本,並在副本準備就緒後切換到新服務層中的資料庫。
更改服務層後,您需要為新的服務層付費,而不是從收到服務層更改請求時開始。
可以從Azure Portal更改Azure SQL資料庫服務層。 除了Azure portal,以下的方法使您可以自動更改服務層:
最常見的垂直擴展的使用範例是根據DTU(數據庫吞吐量單位)使用情況自動擴展或縮減服務層:

例如,您可以設定一個 script,該 script將在DTU使用率超過指定的閾值時自動擴展到更高的資料庫服務層,例如,如果DTU使用率大於70%,
則切換到標準S0,然後擴展到較低的服務 如果DTU使用率百分比低於指定的閾值,請選擇"基本"服務層;例如,如果DTU使用率低於30%,
請切換到"基本"服務層。 另一個用例是根據高峰和非高峰時間安排按比例放大和縮小。
例如,如果一家企業希望在下午1:00之間有更高的流量。 和下午3:00,可以在此期間擴展到高級服務層,並在一天的剩餘時間內擴展到標準服務層。
使用T-SQL更改服務層級讓我們考慮一個場景,其中Mike在下午1:00之間面臨比平常更高的流量。 和下午3:00 在玩具商店資料庫上;
他可以使用T-SQL更改服務層,如下所示:
先使用 SELECT * FROM sys.database_service_objectives查詢目前的服務層資訊,你應該從此查詢中獲得以下的輸出:

再利用下面的 ALTER指令進行修改:
ALTER DATABASE ToyStore MODIFY (Edition='Standard', Service_ objective='S0')
然後再利用 SELECT * FROM sys.database_service_objectives查詢目前的服務層資訊狀態,應該會得到下面的資訊:

你會發現資料庫的狀態正在改變,也有百分比顯示狀態,最後資料庫完成。
下指令的這個連線將會會切換成不同模式時中斷,你也會出現如下的錯誤訊息。
Msg 0, Level 11, State 0, Line 11
A severe error occurred on the current command. The results, if any,
should be discarded: Msg 0, Level 20, State 0, Line 11
最後就會發現服務層有改變。
你可以把下面的句子加上變數參數,變成下面的程式:
PRINT 'database update in progress...'
DECLARE @databaseName sysname='ToyStore', @databaseEdition varchar(100)='Basic', @PerformanceTier varchar(10)='Basic'
Declare @dsql Varchar(MAX) = 'ALTER DATABASE [' + @databaseName + '] MODIFY (Edition=''' + @ databaseEdition + ''',
Service_objective=''' + @PerformanceTier + ''')';
SET @dsql = @dsql + ' WHILE(
exists (SELECT TOP 1 * FROM sys.dm_operation_status WHERE resource_type_
desc=''database'' AND major_resource_id=''' + @databaseName + ''' AND STATE=1 ORDER BY start_time DESC))
BEGIN WAITFOR DELAY ''00:00:05'' END'
EXEC(@dsql)
只需要給它三個參數,第一個是 @databaseName,是資料庫名稱,第二個是 @databaseEdition,是新資料庫的服務層,可以輸入
像是Basic、Standard、Premium或是 PremiumRS。第三個是@PerformanceTier,輸入像是 S0、S1、或是 S2。
另一個是垂直分區,在垂直分區中,對資料進行分區的方式是使不同的表集放在在不同的單一資料庫中:
例如,如果資料庫中有四個不同的模式,例如財務,人力資源,客戶關係管理和庫存,則每個模式都儲在在一個獨立的資料庫中。
垂直分區需要跨資料庫查詢才能生成報告,該報告需要來自不同資料庫中不同表的資料。 Azure SQL資料庫目前是不支援三部分或四部分的對象名,
例如databaseName.SchemaName.TableName(不包括tempdb)。 因此,必需要使用彈性查詢進行跨數據庫查詢。
水平擴展水平擴展或切片是指基於切片或者是分區鍵,將資料庫中一個大表中的資料跨多個獨立資料庫庫進行分區。
例如,客戶表在CustomerID上跨多個獨立的資料庫進行分區。
每個獨立的資料庫儲存一個或多個客戶的資訊。在以下情況下,水平縮放可能會有所幫助:
•資料太大而無法容納一個資料庫。
•資料將分發到不同的位置,以提高性能或合規性。例如,如果歐洲客戶的資料位於歐洲資料中心而不是亞洲資料中心,則其性能將得到改善。
•將租戶或客戶隔離到自己的資料庫中,以實現更好的管理和性能。如果所有客戶數據都在單個資料庫中,並且由於為客戶進行的交易(例如X)而導致資料庫中存在阻塞,
則所有其他客戶查詢將不得不等待阻塞得到解決,從而導致其餘客戶的表現不佳。
•單一的資料庫需要高級服務層來管理一個大表。在多個獨立的標準服務層資料庫中劃分客戶數據將降低成本。
•所有(或大多數)查詢都是對切片鍵上的資料庫庫過濾器進行的。
本機支持切片,因此我們不必從頭開始實現切片的機制。但是,我們確實需要創建和管理碎片。使用Elastic Database Tools可以輕鬆完成此操作。
"依賴資料的路由"是指根據查詢中指定的切片鍵將查詢路由到正確的資料庫(切片)。
這是查詢切片環境的基本方法。 該應用程式不維護與不同切片的連接字符串。
該應用程序甚至沒有實現基於分片鍵選擇分片的邏輯。
這是通過使用Elastic Database客戶端庫中提供的功能以本機完成的。該應用程序使用Elastic Database客戶端中定義的OpenConnectionForKey方法定義單個連接
多租戶數據模型多租戶數據模型是指如何將租戶放置在分片環境中。 放置租戶有兩種不同的模型:每個租戶資料庫(單租戶模型)和共享資料庫-切片(多租戶模型)。
下期將再繼續介紹有關建立警示相關的設定。