Azure SQL 資料庫 (預覽版) 中的彈性作業

適用於:Azure SQL Database

在本文中,我們會檢閱 Azure SQL 資料庫彈性作業的功能和詳細資料。

注意

彈性工作為預覽版。 有關目前的預覽版功能,請參閱增補使用規定,以了解適用於 Azure 功能預覽版的法律條款。 Azure SQL Database 提供預覽,讓您有機會在功能正式發行 (GA) 之前評估功能以及與產品小組分享意見反應

彈性作業概觀

您可以建立和排程可針對一或多個 Azure SQL 資料庫定期執行的彈性作業,以執行 Transact-SQL (T-SQL) 查詢及執行維護工作。

您可以定義將執行作業的目標資料庫或資料庫群組,並同時定義要執行作業的排程。 彈性工作中的所有日期和時間均採用 UTC 時區。

作業可處理登入目標資料庫的工作。 您也會定義、維護及保存要在一個資料庫群組執行的 Transact-SQL 指令碼。

每項作業會記錄執行狀態,如果發生任何失敗,也會自動重試作業。

何時使用彈性作業

有數個您可以使用彈性作業自動化的案例:

  • 將管理工作自動化,並將這些工作排定為在每個工作日、下班時間等時段執行。
    • 部署結構描述變更、認證管理。
    • 效能資料收集或租使用者 (客戶) 遙測收集。
    • 更新參考資料 (所有資料庫通用的資訊)。
    • 從 Azure Blob 儲存體載入資料。
  • 將作業設定為以週期性基礎跨資料庫的集合執行,例如在離峰時段。
    • 以持續執行的基礎從一組資料庫將查詢結果收集至中央資料表。
    • 查詢可以持續執行,並設定為觸發要執行的其他作業。
  • 收集資料以供報告
    • 將資料庫集合中的資料彙總到單一目的地資料表中。
    • 跨大型資料庫集合執行較長的執行資料處理查詢,例如客戶遙測的集合。 結果會收集到單一目的地資料表做進一步的分析。
  • 資料移動
    • 針對自訂開發的解決方案、商務自動化或其他工作管理。
    • 在資料庫中的資料表之間擷取/處理/插入資料的 ETL 處理。

當出現以下情況時,請考慮彈性作業:

  • 需要依排程定期執行的工作,以一或多個資料庫為目標。
  • 需要執行一次但跨多個資料庫執行的工作。
  • 需要對任何資料庫組合執行的作業:一或多個個別資料庫、伺服器上的所有資料庫、彈性集區中的所有資料庫,並新增可納入或排除任何特定資料庫的彈性。 作業可以跨越多部伺服器、多個集區執行,甚至可以針對不同訂用帳戶中的資料庫執行。 伺服器和集區都會以動態方式列舉在執行階段,因此作業會針對在執行階段存在於目標群組的所有資料庫執行。
    • 這是與 SQL Agent 的一個顯著差異,即無法動態列舉目標資料庫,特別是在動態新增/刪除資料庫的 SaaS 客戶案例中。

彈性作業元件

元件 描述
彈性作業代理程式 您建立用來執行和管理作業的 Azure 資源。
作業資料庫 Azure SQL Database 中的資料庫,作業代理程式使用此資料庫來儲存作業相關資料、作業定義等。
作業 作業是由一或多個作業步驟所組成的工作單位。 作業步驟可指定要執行的 T-SQL 指令碼,以及執行指令碼所需的其他詳細資料。
目標群組 要執行作業的伺服器、集區和資料庫集合。

彈性作業代理程式

彈性作業代理程式是用於建立、執行和管理作業的 Azure 資源。 彈性作業代理程式是您在入口網站中建立的 Azure 資源 (也支援 PowerShell 和 REST API)。

建立彈性作業代理程式時需要 Azure SQL 資料庫中現有的資料庫。 此代理程式會將此現有 Azure SQL 資料庫設定為作業資料庫

您可以透過 Azure 入口網站啟動、停用或取消作業。 Azure 入口網站也可讓您檢視作業定義和執行歷程記錄。

彈性作業代理程式的成本

彈性作業代理程式目前的預覽版為免費。 預覽期間 Azure 入口網站中的帳單卡片會根據選取的並行容量層顯示成本估計 (以美元為單位)。 目前僅供進階成本估計之用。

作業資料庫的費率與 Azure SQL Database 中的任何資料庫相同。

彈性作業資料庫

作業資料庫用於定義作業以及追蹤作業執行的狀態與歷程記錄。 作業會在目標資料庫中執行。 作業資料庫也可用來儲存代理程式中繼資料、記錄、結果、作業定義,此外也包含許多有用的預存程序和其他資料庫物件,以便使用 T-SQL 建立、執行和管理作業。

在目前的預覽中,建議 Azure SQL 資料庫 (S1 或更高版本) 中現有的資料庫,才能建立彈性作業代理程式。

作業資料庫應該是全新、空白、S1 或更高的服務目標 Azure SQL Database。

作業資料庫的建議服務目標為 S1 或更高,但最佳選擇取決於作業的效能需求:作業步驟數、作業目標數,以及作業的執行頻率。

如果對作業資料庫執行的作業速度比預期慢,則使用 Azure 入口網站或 sys.dm_db_resource_stats DMV 來監視慢速期間內作業資料庫的資料庫效能和資源使用率。 如果資源的使用率 (例如 CPU、資料 IO 或記錄寫入) 接近 100% 並與慢速期間相互關聯,請考慮以累加方式將資料庫調整為更高的服務目標 (在 DTU 模型vCore 模型 中),直到作業資料庫效能獲得充分改善為止。

重要

請勿修改現有物件,或在作業資料庫中建立新的物件,不過您可以從資料表讀取資料以進行報告和分析。

彈性作業和作業步驟

「作業」是依照排程執行的工作單位,或為一次性作業。 一項作業包含一或多個「作業步驟」。

每個作業步驟都會指定要執行的 T-SQL 指令碼、要執行 T-SQL 指令碼的一或多個目標群組,以及作業代理程式連線到目標資料庫所需的認證。 每個作業步驟都有可自訂的逾時和重試原則,而且可以選擇性地指定輸出參數。

彈性作業目標

彈性作業能夠按照排程或依需求,跨大量資料庫平行執行一或多個 T-SQL 指令碼。 目標可以是 Azure SQL 資料庫的任何層級。

您可以對任何資料庫組合執行排程的作業:一或多個個別資料庫、伺服器上的所有資料庫、彈性集區中的所有資料庫,並新增可納入或排除任何特定資料庫的彈性。 作業可以跨越多部伺服器、多個集區執行,甚至可以針對不同訂用帳戶中的資料庫執行。 伺服器和集區都會以動態方式列舉在執行階段,因此作業會針對在執行階段存在於目標群組的所有資料庫執行。

下圖顯示跨不同類型的目標群組執行作業的作業代理程式:

Conceptual diagram of elastic job agent using database credentials as authentication to target.

目標群組

「目標群組」可定義一組將會執行某個作業步驟的資料庫。 目標群組可以包含下列各項的任意組合:

  • 邏輯 SQL Server - 如果未指定伺服器,則在作業執行階段存在於伺服器中的所有資料庫都是群組的一部分。 必須提供 master 資料庫認證,才能在作業執行之前列舉並更新群組。 如需邏輯伺服器的詳細資訊,請參閱什麼是 Azure SQL Database 和 Azure Synapse Analytics 中的伺服器?
  • 彈性集區 - 如果已指定彈性集區,則在作業執行階段彈性集區中的所有資料庫都是群組的一部分。 針對伺服器,必須提供 master 資料庫認證,才能在作業執行之前更新群組。
  • 單一資料庫 - 將一或多個個別資料庫指定為群組的一部分。

提示

在執行作業時,「動態列舉」會重新評估包含伺服器或集區的目標群組中的資料庫集合。 動態列舉可確保作業會在執行階段跨越伺服器或集區中所有現有的資料庫執行。 在執行階段重新評估資料庫清單特別適用於集區或伺服器成員資格經常變更的案例。

您可以將集區與單一資料庫指定為在群組中包含或排除。 這能夠建立含有任意資料庫組合的目標群組。 例如,您可以將伺服器新增至目標群組,但是在彈性集區中排除特定資料庫 (或排除整個集區)。

目標群組可以包含多個訂用帳戶中的資料庫,而且橫跨多個區域。 跨區域執行比在同區域內執行的延遲較高。

下列範例顯示當作業執行時,不同目標群組定義是如何以動態方式列舉的,進而決定作業將執行哪些資料庫:

Diagram of target group examples.

  • 範例 1 顯示由一系列個別資料庫組成的目標群組。 當使用這個目標群組來執行作業步驟時,作業步驟的動作將會在其中每一個資料庫中執行。
  • 範例 2 顯示包含目標伺服器的目標群組。 當使用這個目標群組來執行作業步驟時,伺服器會以動態方式列舉,以決定目前在伺服器中的資料庫清單。 作業步驟的動作會在其中每個資料庫中執行。
  • 範例 3 顯示與範例 2 類似的目標群組,但特別排除個別資料庫。 作業步驟的動作「不會」在排除的資料庫中執行。
  • 範例 4 顯示包含以彈性集區作為目標的目標群組。 類似於範例 2,集區會在作業執行時間以動態方式列舉,以決定集區中的資料庫清單。

Diagram of examples of advanced scenarios with target group include and exclude rules.

  • 範例 5範例 6 顯示進階案例,其中伺服器、彈性集區和資料庫都可使用包含及排除規則來結合。

注意

作業資料庫本身可以是作業的目標。 在此案例中,作業資料庫的處理方式就像任何其他目標資料庫一樣。 您必須在作業資料庫中建立作業使用者並授予足夠的權限,且作業使用者的資料庫範圍認證也必須存在於作業資料庫中,就像任何其他目標資料庫一樣。

驗證

為彈性作業代理程式的所有目標選擇一種方法。 例如,對於單一彈性作業代理程式,您無法將一個目標伺服器設定為使用資料庫範圍認證,而另一個使用 Microsoft Entra ID 驗證。

彈性作業代理程式可透過兩個驗證選項連線到目標群組指定的伺服器/資料庫:

從 2023 年開始,Azure Active Directory 的名稱已變更為 Microsoft Entra ID

透過使用者指派的受控識別 (UMI) 進行驗證

透過使用者指派的受控識別 (UMI) 進行 Microsoft Entra (先前稱為 Azure Active Directory) 驗證,是將彈性作業連線到 Azure SQL 資料庫的建議選項。 透過 Microsoft Entra ID 支援,作業代理程式將能夠使用 UMI 連線到目標資料庫 (資料庫、伺服器、彈性集區) 和輸出資料庫。

Diagram of how user-assigned managed identities (UMI) work with elastic jobs.

或者,您也可在包含彈性作業資料庫的邏輯伺服器上啟用 Microsoft Entra ID 驗證,以透過 Microsoft Entra ID 連線存取/查詢該資料庫。 不過,作業代理程式本身會使用內部憑證式驗證來連線到其作業資料庫。

您可以建立一個 UMI,或使用現有的 UMI,並將相同的 UMI 指派給多個作業代理程式。 每個作業代理程式僅支援一個 UMI。 將 UMI 指派給作業代理程式後,該作業代理程式僅會使用此身分識別在目標資料庫連線並執行 t-SQL 作業。SQL 驗證不會用於該作業代理程式的目標伺服器/資料庫。

UMI 名稱的開頭必須是字母或數字,且長度介於 3 到 128 之間。 其可包含 -_ 字元。

如需 Azure SQL 資料庫中 UMI 的詳細資訊,請參閱 Azure SQL 的受控識別,包括使用 UMI 作為 Azure SQL 資料庫邏輯伺服器身分識別所需的步驟和優點。 如需詳細資訊,請參閱使用 Microsoft Entra (先前為 Azure Active Directory) 向 Azure SQL 平台進行驗證

重要

使用 Microsoft Entra ID 驗證時,請在每個目標資料庫中根據 Microsoft Entra ID 建立您的 jobuser 使用者。 將每個目標資料庫中執行作業所需的權限授與該使用者。

不支援使用系統指派的受控識別 (SMI)。

透過資料庫範圍認證進行驗證

雖然 Microsoft Entra (先前為 Azure Active Directory) 驗證是建議選項,但作業可設定為使用資料庫範圍認證,在執行時連線到目標群組指定的資料庫。 在 2023 年 10 月之前,資料庫範圍認證是唯一的驗證選項。

如果目標群組包含伺服器或集區,則會使用這些資料庫範圍認證來連線至 master 資料庫,以列舉可用的資料庫。

  • 資料庫範圍認證必須建立在作業資料庫中。
  • 所有目標資料庫都必須以足夠的權限登入,作業才能順利完成 (下圖中的 jobuser)。
  • 目標資料庫中所建立的認證 (下圖中 masteruserjobuserLOGINPASSWORD) 應該符合工作資料庫中所建立認證內的 IDENTITYSECRET
  • 認證可跨作業重複使用,而認證密碼會經過加密並受到保護,以免具有作業物件唯讀權限的使用者加以使用。

下圖旨在協助了解設定適當的作業認證,以及彈性作業代理程式如何使用資料庫認證作為驗證來連線到目標伺服器/資料庫中的登入/使用者。

Diagram of elastic jobs credentials, and how the elastic job agent connects using database credentials as authentication to logins/users in target servers/databases.

注意

使用資料庫範圍認證時,請記得要在每個目標資料庫中建立您的 jobuser 使用者。

彈性作業私人端點

彈性作業代理程式支援彈性作業私人端點。 建立彈性作業私人端點,即可建立彈性作業與目標伺服器之間的私人連結。 彈性作業私人端點功能與 Azure Private Link 不同。

Diagram of service-managed private endpoints for elastic jobs.

彈性作業私人端點功能支援目標/輸出伺服器的私人連線,因此即使啟用 [拒絕公用存取] 選項,作業代理程式仍然可以與其連線。 如果您想要停用 [允許 Azure 服務和資源存取該伺服器] 選項,使用私人端點也是一個可能解決方案。

彈性作業私人端點支援彈性作業代理程序驗證的所有選項。

彈性作業私人端點功能可讓您選擇服務受控私人端點,以建立作業代理程式與其目標/輸出伺服器之間的安全連線。 服務受控私人端點為特定虛擬網路和子網路內的私人 IP 位址。 當您選擇在其中一個作業代理程式的目標/輸出伺服器上使用私人端點時,Microsoft 會建立服務受控私人端點。 然後,作業代理程式會獨佔使用此私人端點來連接和執行作業,或在該目標/輸出資料庫上寫入作業輸出。

您可以透過 Azure 入口網站建立和允許彈性作業私人端點。 透過私人連結連線的目標伺服器可以是 Azure 中的任何位置,即使在不同的地理位置和訂用帳戶中。 您必須為每個所需的目標伺服器和作業輸出伺服器建立私人端點,才能啟用此通訊。

如需一些為彈性作業設定全新服務受控私人端點的教學課程,請參閱設定 Azure SQL 彈性作業私人端點

彈性作業私人端點的需求

  • 若要使用彈性作業私人端點,作業代理程式和目標伺服器/資料庫都必須裝載於 Azure 中 (相同或不同區域),並屬於相同的雲端類型 (例如公用雲端或政府雲端)。
  • Microsoft.Network 資源提供者必須註冊作業代理程式和目標/輸出伺服器的主機訂用帳戶。
  • 每個目標/輸出伺服器均會建立彈性作業私人端點。 私人端點必須先獲得核准,彈性作業代理程式才能使用。 您可以透過該邏輯伺服器或您慣用用戶端的 [網路] 窗格來完成。 然後,彈性作業代理程式就能夠使用私人連線,連線到該伺服器下的任何資料庫。
  • 從彈性作業代理程式到作業資料庫的連線將不會使用私人端點。 作業代理程式本身會使用內部憑證式驗證來連線到其作業資料庫。 須注意的是,如果您將作業資料庫新增為目標群組成員。 然後,它會以一般目標的形式運作,您須視需要使用私人端點進行設定。

彈性作業資料庫權限

在作業代理程式建立期間,會在作業資料庫中建立結構描述、資料表,以及名為 jobs_reader 的角色。 此角色會具有下列權限,而且旨在賦予系統管理員更細微的存取控制以便監視作業。 管理員可讓使用者將作業新增至作業資料庫中的 jobs_reader 角色,讓使用者能夠監視作業執行。

角色名稱 'jobs' 結構描述權限 'jobs_internal' 結構描述權限
jobs_reader SELECT

警告

您不應更新作業資料庫中的內部目錄檢視,例如 jobs.target_group_members。 手動變更這些目錄檢視可能會損毀作業資料庫並導致失敗。 這些檢視僅適用於唯讀查詢。 您可以使用作業資料庫的預存程序來新增/刪除目標群組/成員,例如 jobs.sp_add_target_group_member

重要

在授與作業資料庫任何提高權限的存取權之前,請考慮安全性含意。 有權建立或編輯作業的惡意使用者可以建立或編輯某個作業,該作業使用預存認證來連線到惡意使用者所掌控的資料庫,這可讓惡意使用者決定認證的密碼或執行惡意命令。

監視彈性作業

從 2023 年 10 月開始,彈性作業代理程式已與 Azure 警示整合以取得作業狀態通知,進而簡化了用於監視作業執行狀態和歷程記錄的解決方案。

Azure 入口網站也有全新的額外功能,可支援彈性作業和作業監視。 您可以使用 Azure 入口網站、Azure CLI、PowerShell 和 REST API 來建立 Azure 監視器警示規則失敗的彈性作業計量是監視和接收彈性作業執行警示的良好起點。 此外,您可以選擇透過 Azure 警示設施的可設定動作 (例如簡訊或電子郵件) 來發出警示。 如需詳細資訊,請參閱在 Azure 入口網站中建立 Azure SQL 資料庫的警示

如需相關範例,請參閱建立、設定及管理彈性作業 (預覽版)

作業輸出

每個目標資料庫上的作業步驟結果都會詳加記錄,而且可以將指令碼輸出擷取至指定的資料表。 您可以指定要儲存作業所傳回資料的資料庫。

作業歷程記錄

透過查詢資料表 jobs.job_executions,來檢視作業資料庫中的彈性作業執行歷程記錄。 系統清理作業會清除留存超過 45 天的執行歷程記錄。 若要手動移除留存少於 45 天的歷程記錄,請在作業資料庫中執行 sp_purge_jobhistory 預存程序。

工作狀態

您可以透過查詢資料表 jobs.job_executions,來監視作業資料庫中的彈性作業執行

最佳作法

使用彈性資料庫作業時,請考慮下列最佳做法。

安全性最佳做法

  • 將 API 的使用限制為受信任的個人。
  • 認證應該具有執行作業步驟所需的最低權限。 如需詳細資訊,請參閱授權和權限
  • 使用伺服器和/或集區目標群組的成員時,強烈建議建立個別的認證,而該認證須具有 master 資料庫的權限,可在作業執行前檢視/列出用來擴充伺服器和/或集區的資料庫清單。

彈性作業效能

彈性作業在等待長時間執行的作業完成時,會使用最少的運算資源。

視資料庫的目標群組大小和作業所需的執行時間 (並行背景工作數目) 而定,代理程式需要不同的計算量和作業資料庫效能 (目標愈多和作業數目較高,所需的計算量就愈高)。

並行容量層

從 2023 年 10 月開始,彈性作業代理程式具有多個效能層,可允許增加容量。

容量增量表示,作業代理程式可以連線並啟動作業的並行目標資料庫總數。 如需作業執行的更多並行目標連線,請從預設 JA100 層升級作業代理程式的分層,其限制為 100 個並行目標連線。

大部分的環境隨時都需要少於 100 個並行作業,因此 JA100 是預設值。

彈性作業代理程式層 並行作業數上限
JA100 100
JA200 200
JA400 400
JA800 800

若作業目標超過作業代理程式的並行容量層,則將會為某些目標資料庫/伺服器建立佇列延遲。 例如,如果您在 JA100 層中啟動具有 110 個目標的作業,10 個作業會等到其他作業完成為止。

彈性作業代理程式的分層或服務目標可以透過 Azure 入口網站、PowerShell作業代理程式 REST API 來修改。 如需範例,請參閱調整作業代理程式

限制作業對彈性集區的影響

若要確保在對 Azure SQL 資料庫彈性集區中的資料庫執行作業時,資源不會負擔過重,則可以設定作業來限制作業可以同時執行的資料庫數目。

藉由在 T-SQL 中設定sp_add_jobstep預存程序@max_parallelism的參數,以設定作業執行所在的並行資料庫數目。

等冪指令碼

彈性作業的 T-SQL 指令碼必須具有等冪性。 「等冪」表示,如果指令碼成功,而且再次執行,則會出現相同的結果。 指令碼會因為暫時性網路問題而失敗。 在此情況下,工作會自動重新執行指令碼,達到預設的次數才會停止。 即使等冪指令碼已成功執行兩次 (或更多次),仍然會有相同的結果。

簡單的策略是在建立物件之前,測試其是否存在。 下列是假設的範例:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE [name] = N'some_object')
    print 'Object does not exist'
    -- Create the object
ELSE
    print 'Object exists'
    -- If it exists, drop the object before recreating it.

同樣地,指令碼必須以邏輯方式測試並反駁它所找到的任何條件,才能夠順利執行。

限制

這些是彈性作業服務目前的限制。 我們正在積極地盡可能移除這些限制。

問題 描述
在容錯移轉/移至新的 Azure 區域之後,必須重新建立並啟動彈性作業代理程式。 彈性作業服務會將其所有作業代理程式與作業中繼資料儲存在工作資料庫中。 任何容錯移轉或移至新 Azure 區域的 Azure 資源也會將工作資料庫、作業代理程式與作業中繼資料移至新的 Azure 區域。 然而,彈性作業代理程式是僅限計算的資源,而且必須在新區域中明確地重新建立並啟動,才能開始在新區域中再次執行作業。 啟動之後,彈性作業代理程式會依先前定義的作業排程,繼續在新區域中執行作業。
過多來自工作資料庫的稽核記錄 彈性作業代理程式會持續輪詢工作資料庫,以檢查新作業與其他 CRUD 作業的到達。 若在存放作業資料庫的伺服器上啟用稽核,作業資料庫會產生大量的稽核記錄。 搭配述詞運算式使用 Set-AzSqlServerAudit 命令,篩選出這些稽核記錄,即可避免此問題。

例如:
Set-AzSqlServerAudit -ResourceGroupName "ResourceGroup01" -ServerName "Server01" -BlobStorageTargetState Enabled -StorageAccountResourceId "/subscriptions/7fe3301d-31d3-4668-af5e-211a890ba6e3/resourceGroups/resourcegroup01/providers/Microsoft.Storage/storageAccounts/mystorage" -PredicateExpression "database_principal_name <> '##MS_JobAccount##'"

此命令只會篩選出作業代理程式的工作資料庫稽核記錄,而不是篩選出作業代理程式的任何目標資料庫稽核記錄。
使用超大規模資料庫作為作業資料庫 不支援使用超大規模資料庫作為作業資料庫。 不過,彈性作業可以將目標設為超大規模資料庫,方法與 Azure SQL Database 中的任何其他資料庫相同。
具有彈性作業的無伺服器資料庫和自動暫停。 已啟用自動暫停的無伺服器資料庫不支援作為作業資料庫。 彈性工作所鎖定的無伺服器資料庫支援自動暫停,而且將由工作連線來繼續。
作業資料庫匯出至 BACPAC 檔案 不支援將作業資料庫匯出至 BACPAC 檔案。 如果需要匯出包含作業資料庫的 SQL Server,則應該先卸除作業資料庫,然後再匯出伺服器。

後續步驟