徵兆
此更新包含以下針對 Microsoft SQL Server AlwaysOn 租約逾時功能的改進:
-
租約逾時訊息現在會顯示並記錄目前時間及預期續約時間。
-
新增了一份針對租賃工人的錯誤訊息,清楚說明租約逾時的原因。
-
新增了延長活動及新的環狀緩衝區,供租賃工人使用。 這些標示清楚標示租賃階段。
解決方案
此問題首次在以下 SQL Server 服務包中被修正。
欲了解更多關於 SQL Server 2012 服務包 3 (SP3) ,請參閱 SQL Server 2012 服務包 3 中已修正的錯誤。
Service Pack 2 for SQL Server for SQL Server 2014關於 SQL Server 服務包 服務包是累積式的。 每個新服務包都包含先前服務包中的所有修正,以及任何新的修正。 我們的建議是套用該服務包的最新服務包及累積更新。 你不必在安裝最新服務包前安裝先前的服務包。 請使用以下文章中的表1,查詢最新服務包及最新累積更新的更多資訊。如何確定 SQL Server 及其元件的版本、版本與更新等級
其他相關資訊
為了提供更多見解,SQL Server 新增了錯誤訊息。 下表列出並解釋了每一項。
|
錯誤 |
錯誤訊息 |
原因 |
糾正措施 |
|---|---|---|---|
|
19419 |
可用性群組 '%.*ls' 與 Windows Server 故障轉移叢集之間的租約續約失敗,因為現有租約已不再有效。 |
SQL Server 端的租約工作者未能及時排程處理叢集的事件訊號。 |
檢查伺服器的 CPU 使用率,因為 SQL Server 租用者似乎快餓死了。 |
|
19420 |
可用性群組「%.*ls」被明確要求停止租約續約。 |
租約續約將停止,因為可使用群組將下線。 這僅供參考。 |
|
|
19421 |
可用性群組 '%.*ls' 與 Windows Server 故障轉移叢集之間的租約續約失敗,因為續約未在租約間隔內完成。 |
叢集端的租約助手未能及時通知 SQL Server 租約工作者。 |
請檢查 WSFC 叢集中對應的可用性群組資源,看看是否回報任何錯誤。 |
|
19422 |
可用性群組 '%.*ls' 與 Windows Server 故障轉移叢集之間的租約續約失敗,因為 Windows 錯誤代碼為 ('%d') 。 |
SQL Server 端的租約工作人員因 Windows 錯誤未能續約。 |
檢查 Windows 錯誤代碼並採取修正措施。 |
|
19423 |
可用性群組「%.*ls」租約已不再有效,無法開始租約續約程序。 |
當租賃工作人員開始處理線上電話提供的超額租約時,租約已經過期。 這可能是因為排程問題造成的。 |
檢查伺服器的 CPU 使用率,因為 SQL Server 租用者似乎快餓死了。 |
|
19424 |
可用性群組「%.*ls」的租賃員工現在正在線上提供 ( 03%的 ms) 值,將多餘的租約時間休息。 這只是一則資訊訊息。 不需要使用者操作。 |
資訊性。 額外分配的線上時間用來啟動租約續約串,並作為可用性群組線上例行程序的一部分。 |
錯誤 19419 範例:如果你使用除錯器連接 SQL Server,會中斷 SQL Server 程序中對執行緒的任何服務,直到你恢復 SQL Server 程序。 當您恢復 SQL Server 時,SQL Server 錯誤日誌中會回報以下情況:
<日期時間> 伺服器錯誤:19419,嚴重程度:16,狀態:1。 <日期時間> 伺服器Windows Server故障轉移叢集在租約逾時期內未收到來自主機可用性群組「ag」的程序事件訊號SQL Server。 <日期時間> 伺服器錯誤:19407,嚴重程度:16,州:1。 <日期 時間> 伺服器 可用性群組 'ag' 與 Windows Server 故障轉移叢集之間的租約已到期。 SQL Server 實例與 Windows Server 故障轉移叢集之間發生連線問題。 要判斷可用性群組是否正確切換故障轉移,請檢查 Windows Server 故障轉移叢集中對應的可用性群組資源。 <日期時間> 伺服器 AlwaysOn:可用性群組 'ag' 的本地副本因租約到期或租約續約失敗而離線。 這只是一則資訊訊息。 不需要使用者操作。 <日期時間> 伺服器 可用性群組 'ag' 中本地可用性副本的狀態已從「PRIMARY_NORMAL」變更為「RESOLVING_NORMAL」。 副本狀態會因啟動、故障轉移、通訊問題或叢集錯誤而改變。 欲了解更多資訊,請參閱可用性群組儀表板、SQL Server 錯誤日誌、Windows Server 故障轉移叢集管理主控台或 Windows Server 故障轉移叢集日誌。
19419 錯誤之所以會回傳,是因為 SQL Server 沒有回應叢集服務。 您也可能同時收到 (19407) 的租約逾時錯誤訊息,並附有19419錯誤。錯誤 19424 範例:以下是在可用性群組轉換為 PRIMARY 角色前所報告的超額租約時間訊息:
<日期時間> 伺服器 可用性群組 'ag' 的租賃員工現在正在休眠,將線上提供的多餘租約時間 (164766 毫秒) 。 這只是一則資訊訊息。 不需要使用者操作。 <日期時間> 伺服器 可用性群組 'ag' 中本地可用性副本的狀態已從「PRIMARY_PENDING」變更為「PRIMARY_NORMAL」。 副本狀態會因啟動、故障轉移、通訊問題或叢集錯誤而改變。 欲了解更多資訊,請參閱可用性群組儀表板、SQL Server 錯誤日誌、Windows Server 故障轉移叢集管理主控台或 Windows Server 故障轉移叢集日誌。
availability_group_lease_expired與hadr_ag_lease_renewal XEvent 系統已有所改進,新增了提供租約狀況資訊的數據點。 下表說明這些 XEvent 的改進:
|
XEvent |
新柱 |
描述 |
|---|---|---|
|
availability_group_lease_expired |
current_time |
租約到期時間 |
|
availability_group_lease_expired |
new_timeout |
暫停時間,當availability_group_lease_expired被提高時,current_time時間會大於new_timeout |
|
availability_group_lease_expired |
州 |
租賃階段:請參閱下方租賃階段表格 |
|
hadr_ag_lease_renewal |
州 |
hadr_ag_lease_renewal |
|
hadr_ag_lease_renewal |
error_code |
如果狀態是HadrLeaseRenewal_FailedWithWindowsError,那麼與失敗相關聯的 Windows 錯誤代碼error_code |
租賃階段與定義下表列出可能的租賃階段並說明其功能:
|
藝名 |
描述 |
|---|---|
|
HadrLeaseRenewal_LeaseWorkerStarted |
租約員工討論串開始了。 |
|
HadrLeaseRenewal_StartedExcessLeaseSleep |
開始超額租約。 超額租約階段記錄租約線程在可用性群組的線上階段開始。 |
|
HadrLeaseRenewal_FailedExcessSleepInvalidOnlineLease |
如果租約已經到期,我們就算是超額租約失敗。 |
|
HadrLeaseRenewal_SkipExcessSleep |
如果睡眠時間短於租約間隔,我們會跳過多餘租約。 不需要走超額租約,直接開始握手流程就好。 |
|
HadrLeaseRenewal_ExcessSleepSucceeded |
超額租約成功了。 |
|
HadrLeaseRenewal_RenewSucceeded |
我們應該在每次續約時看到這種情況。 |
|
HadrLeaseRenewal_LeaseNotValid |
等同於錯誤:19419 Windows Server 故障轉移叢集在租約逾時期內未收到來自 SQL Server 可用性群組 '%.*ls' 的程序事件訊號。 |
|
HadrLeaseRenewal_StopLeaseRenewal |
你應該會在故障切換事件中看到這點。 |
|
HadrLeaseRenewal_LeaseExpired |
等同於錯誤:19421SQL Server 托管可用性群組 '%.*ls' 在租約逾時期內未收到來自 Windows Server 故障轉移叢集的程序事件訊號。 |
|
HadrLeaseRenewal_FailedWithWindowsError |
租約續約失敗是因為 Windows 錯誤。 |
欲了解更多資訊,請參閱 改良版AlwaysOn可用性群組租約逾時診斷。欲了解更多關於租約逾時的資訊,請參閱《How It Work: SQL Server AlwaysOn Lease Timeout》。
狀態
Microsoft 已確認<適用於>一節所列的 Microsoft 產品確實有上述問題。