本主題描述如何在 SQL Server 中使用 Transact-SQL 或 PowerShell,來設定 Always On 可用性群組的彈性容錯移轉原則。 彈性容錯移轉原則可讓您更精確地控制造成可用性群組之 自動容錯移轉 的狀況。 透過變更觸發自動容錯移轉的失敗狀況和健全狀況檢查的頻率,您可以提高或降低自動容錯移轉的可能性,以便支援高可用性的 SLA。
可用性群組的彈性容錯移轉原則是由其失敗條件層級和健康情況檢查逾時閾值所定義。 當偵測到可用性群組已超過其失敗條件層級或健康情況檢查逾時閾值時,該可用性群組的資源 DLL 會向 Windows Server 容錯移轉叢集 (WSFC) 叢集作出回應。 然後,WSFC 叢集就會起始自動容錯移轉至次要複本。
注意
您無法使用 SQL Server Management Studio,來設定可用性群組的彈性容錯移轉原則。
自動容錯移轉的限制
若要發生自動容錯移轉,目前的主要複本和一個次要複本都必須設定為使用具備自動容錯移轉功能的同步認可可用性模式,而且次要複本必須已與主要複本同步。
SQL Server 2019 (15.x) 會將同步複本的數量上限,從 SQL Server 2017 (14.x) 中最多為 3 的狀態增加至 5。 您可以設定這五個複本的群組,使其在群組內具備自動容錯移轉。 有一個主要複本,再加上四個同步次要複本。
如果可用性群組超過其 WSFC 失敗臨界值,WSFC 叢集將不會嘗試進行可用性群組的自動容錯移轉。 此外,可用性群組的 WSFC 資源群組會維持失敗狀態,直到叢集管理員手動讓失敗的資源群組上線,或者資料庫管理員執行可用性群組的手動容錯移轉為止。 「WSFC 失敗臨界值」 (WSFC Failure Threshold) 定義為可用性群組在給定的時間週期內支援的失敗次數上限。 預設的時間週期為六小時,而且在這段時間內失敗次數上限的預設值為 n-1,其中 n 是 WSFC 節點的數目。 若要變更給定可用性群組得失敗臨界值,請使用 WSFC 容錯移轉管理員主控台。
必要條件
- 您必須連線到承載主要複本的伺服器執行個體。
權限
| 任務 | 權限 |
|---|---|
| 若要設定新可用性群組的彈性容錯移轉原則 | 需要是 sysadmin 固定伺服器角色的成員,且必須具備下列其中之一:CREATE AVAILABILITY GROUP 伺服器權限、ALTER ANY AVAILABILITY GROUP 權限,或 CONTROL SERVER 權限。 |
| 若要修改現有可用性群組的原則 | 需要在可用性群組上具有 ALTER AVAILABILITY GROUP 權限、CONTROL AVAILABILITY GROUP 權限、ALTER ANY AVAILABILITY GROUP 權限,或 CONTROL SERVER 權限。 |
健康情況檢查逾時閾值
可用性群組的 WSFC 資源 DLL 會在裝載主要複本的 SQL Server 執行個體上呼叫 sp_server_diagnostics 預存程序,藉以執行主要複本的「健全狀況檢查」。 sp_server_diagnostics 會以相當於可用性群組健康檢查逾時閾值 1/3 的間隔傳回結果。 預設的健全狀況檢查逾時臨界值為 30 秒,因此 sp_server_diagnostics 會以 10 秒的間隔傳回結果。 如果 sp_server_diagnostics 變慢或未傳回資訊,資源 DLL 會先等候健全狀況檢查逾時臨界值的完整間隔,然後再判斷主要複本是否沒有回應。 如果主要複本沒有回應,就會起始自動容錯移轉 (如果目前支援的話)。
重要
sp_server_diagnostics 不會在資料庫層級執行健全狀況檢查。
故障條件等級
sp_server_diagnostics 所傳回的診斷資料和健康狀態資訊是否足以觸發自動容錯移轉,取決於可用性群組的失敗條件層級。 失敗條件層級指定哪些失敗條件會觸發自動容錯移轉。 失敗狀況層級共有五層,範圍從最低限制 (第一層級) 到最高限制 (第五層級)。 給定的層級包含較低限制的層級。 因此,最嚴格的層級 (五) 包括了四個較低限制的狀況,依此類推。
重要
任何失敗條件層級都無法偵測到損毀的資料庫和可疑資料庫。 因此,損毀或可疑的資料庫 (不論是因為硬體故障、資料損毀或其他問題) 都絕對不會觸發自動容錯移轉。
下表描述與每個層級對應的失敗狀況。
| 層級 | 失敗條件 | Transact-SQL 值 | PowerShell 值 |
|---|---|---|---|
| 一 | 伺服器停機時。 指定當下列任一情況發生時,會啟動自動容錯移轉: SQL Server 服務已關閉。 因為未收到來自伺服器執行個體的 ACK,所以用於連線至 WSFC 叢集的可用性群組租約已到期。 如需詳細資訊,請參閱 How It Works:SQL Server Always On Lease Timeout (運作方式:SQL Server Always On 租用逾時)。 這是最低限制層級。 |
1 | OnServerDown |
| 二 | 伺服器沒有回應時。 指定當發生下列任一情況時,便會啟動自動容錯移轉: SQL Server 的執行個體未連線到叢集,且已超出使用者所指定可用性群組的健康情況檢查逾時閾值。 可用性複本處於失敗狀態。 |
2 | OnServerUnresponsive |
| 三 | 發生嚴重伺服器錯誤時。 指定在發生嚴重的 SQL Server 內部錯誤時啟動自動容錯移轉,例如孤立的自旋鎖、嚴重的寫入存取違規錯誤,或在短時間內產生過多記憶體傾印。 這是預設層級。 |
3 | OnCriticalServerError |
| 四 | 發生中度伺服器錯誤時。 指定當發生中度 SQL Server 內部錯誤時,例如 SQL Server 內部資源集區中持續性的記憶體不足狀況,會啟動自動容錯移轉。 | 4 | OnModerateServerError |
| 五 | 發生任何限定的失敗狀況時。 指定當發生任何符合資格的失敗條件時,會啟動自動容錯移轉,這些條件包括: 偵測排程器死結。 偵測到無法解決的死結。 這是最高限制層級。 |
5 | 在任何符合條件的失敗情況下 |
注意
SQL Server 執行個體對用戶端要求缺少回應,與可用性群組無關。
使用 TRANSACT-SQL
若要設定彈性容錯移轉原則
連接到裝載主要複本的伺服器執行個體。
對於新的可用群組,請使用 CREATE AVAILABILITY GROUPTransact-SQL 聲明。 如果你正在修改現有的可用群組,請使用 ALTER AVAILABILITY GROUPTransact-SQL 語句。
若要設定容錯移轉狀況層級,請使用 FAILURE_CONDITION_LEVEL = n 選項,其中 n 是介於 1 到 5 之間的整數。
例如,下列 Transact-SQL 陳述式會將現有可用性群組
AG1的失敗狀況層級變更為層級一:ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1);這些整數值與失敗狀況層級的關聯性如下所示:
Transact-SQL 值 層級 何時會啟動自動容錯移轉... 1 一 伺服器停機時。 SQL Server 服務會因容錯移轉或重新啟動而停止。 2 二 伺服器沒有回應時。 任何較低值條件都已滿足、SQL Server 服務已連線至叢集且已超過健康情況檢查逾時臨界值,或者目前的主要複本處於失敗狀態。 3 三 發生嚴重伺服器錯誤時。 滿足任何較低值條件,或發生內部重大伺服器錯誤。
這是預設層級。4 四 發生中度伺服器錯誤時。 符合任何較低層級的條件,或發生中度伺服器錯誤。 5 五 發生任何限定的失敗狀況時。 滿足任何較低值條件,或發生符合條件的失敗情況。 如需容錯移轉條件層級的詳細資訊,請參閱可用性群組自動容錯移轉的彈性容錯移轉原則 (SQL Server)。
若要設定健全狀況檢查逾時臨界值,請使用 HEALTH_CHECK_TIMEOUT = n 選項,其中 n 是介於 15000 毫秒 (15 秒) 到 4294967295 毫秒之間的整數。 預設值為 30000 毫秒 (30 秒)。
例如,下列 Transact-SQL 陳述式會將現有可用性群組
AG1的健康情況檢查逾時閾值變更為 60,000 毫秒 (一分鐘)。ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);
使用 PowerShell
若要設定彈性容錯移轉原則
將預設值 (cd) 設為承載主要複本的伺服器執行個體。
將可用性複本加入可用性群組中時,請使用 New-SqlAvailabilityGroup Cmdlet。 修改現有的可用性複本時,請使用 Set-SqlAvailabilityGroup Cmdlet。
若要設定容錯移轉狀況層級,請使用 FailureConditionLevellevel 參數,其中 level 是下列其中一個值:
值 層級 何時會啟動自動容錯移轉... OnServerDown 一 伺服器停機時。 SQL Server 服務會因容錯移轉或重新啟動而停止。 OnServerUnresponsive 二 伺服器沒有回應時。 任何較低值條件都已滿足、SQL Server 服務已連線至叢集且已超過健康情況檢查逾時臨界值,或者目前的主要複本處於失敗狀態。 OnCriticalServerError 三 發生嚴重伺服器錯誤時。 滿足任何較低值條件,或發生內部重大伺服器錯誤。
這是預設層級。OnModerateServerError 四 發生中度伺服器錯誤時。 符合任何較低層級的條件,或發生中度伺服器錯誤。 在任何符合條件的失敗情況下 五 發生任何限定的失敗狀況時。 滿足任何較低值條件,或發生符合條件的失敗情況。 如需容錯移轉條件層級的詳細資訊,請參閱可用性群組自動容錯移轉的彈性容錯移轉原則 (SQL Server)。
例如,下列命令會將現有可用性群組
AG1的失敗狀況層級變更為層級一。Set-SqlAvailabilityGroup ` -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAg ` -FailureConditionLevel OnServerDown若要設定健全狀況檢查逾時臨界值,請使用 HealthCheckTimeoutn 參數,其中 n 是介於 15000 毫秒 (15 秒) 到 4294967295 毫秒之間的整數。 預設值為 30000 毫秒 (30 秒)。
例如,下列命令會將現有可用性群組
AG1的健全狀況檢查逾時臨界值變更為 120,000 毫秒 (兩分鐘)。Set-SqlAvailabilityGroup ` -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAG ` -HealthCheckTimeout 120000
注意
若要檢視 Cmdlet 的語法,請在 SQL Server PowerShell 環境中使用 Get-Help Cmdlet。 如需詳細資訊,請參閱 Get Help SQL Server PowerShell。
若要設定和使用 SQL Server PowerShell 提供者
相關工作
設定自動容錯移轉
變更可用性複本的可用性模式 (SQL Server) (自動容錯移轉需要同步認可可用性模式)