處理適用於 PostgreSQL 的 Azure 資料庫的暫時性連線錯誤 - 單一伺服器

適用於:適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器

重要

適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器位於淘汰路徑上。 強烈建議您升級至 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器。 如需移轉至 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器的詳細資訊,請參閱單一伺服器 適用於 PostgreSQL 的 Azure 資料庫 發生什麼事?

本文說明如何處理連線到 適用於 PostgreSQL 的 Azure 資料庫的暫時性錯誤。

暫時性錯誤

暫時性錯誤 (也稱為暫時性故障) 係指會自行解決的錯誤。 這些錯誤通常會顯示為卸除之資料庫伺服器的連線。 也無法開啟與伺服器的新連線。 例如,硬體或網路失敗時,可能會發生暫時性錯誤。 另一個原因可能是即將推出的新版 PaaS 服務。系統會在不到 60 秒內自動減輕這些事件。 在雲端中設計和開發應用程式的最佳做法是預期暫時性錯誤。 假設它們可以隨時在任何元件中發生,並具備適當的邏輯來處理這些情況。

處理暫時性錯誤

您應該使用重試邏輯來處理暫時性錯誤。 必須考慮的情況:

  • 嘗試開啟連線時發生錯誤
  • 在伺服器端卸除閑置連線。 當您嘗試發出命令時,無法執行此命令
  • 目前執行命令的作用中聯機已卸除。

第一個和第二個案件是相當直接的處理。 嘗試再次開啟連線。 當您成功時,系統已減輕暫時性錯誤。 您可以再次使用您的 適用於 PostgreSQL 的 Azure 資料庫。 建議您先等候再重試連線。 如果初始重試失敗,請回復。 如此一來,系統就可以使用所有可用的資源來克服錯誤情況。 遵循的良好模式是:

  • 在第一次重試之前等候 5 秒。
  • 每次重試之後,都會以指數方式增加等候,最多 60 秒。
  • 設定應用程式認為作業失敗的重試次數上限。

當使用中交易的連線失敗時,較難正確處理復原。 有兩種情況:如果交易本質上是只讀的,則重新開啟連線並重試交易是安全的。 不過,如果交易也寫入資料庫,您必須判斷交易是否已回復,或是否在發生暫時性錯誤之前成功。 在此情況下,您可能剛剛未收到資料庫伺服器的認可通知。

這樣做的其中一種方式是在用戶端上產生用於所有重試的唯一標識碼。 您會將此唯一標識符當做交易的一部分傳遞給伺服器,並將它儲存在具有唯一條件約束的數據行中。 如此一來,您就可以安全地重試交易。 如果先前的交易已回復,且客戶端產生的唯一標識碼還不存在於系統中,它將會成功。 如果先前已儲存唯一標識符,因為先前的交易已順利完成,則它將會失敗,指出重複的索引鍵違規。

當您的程式透過第三方中間件與 適用於 PostgreSQL 的 Azure 資料庫 通訊時,請詢問廠商中間件是否包含暫時性錯誤的重試邏輯。

請務必測試您的重試邏輯。 例如,嘗試在相應增加或減少 適用於 PostgreSQL 的 Azure 資料庫 伺服器的計算資源時執行程序代碼。 您的應用程式應該處理此作業期間發生的短暫停機時間,而沒有任何問題。

下一步