針對 Azure 記憶體帳戶中的可用性問題進行疑難解答

本文可協助您調查可用性 (的變更,例如) 的失敗要求數目。 這些可用性變更通常可透過監視 Azure 監視器中的記憶體計量來識別。 如需在 Azure 監視器中使用計量和記錄的一般資訊,請參閱下列文章:

監視可用性

您應該監視可用性計量的值,以監視記憶體帳戶中記憶體服務的 可用性可用性計量包含百分比值。 其計算方式是取得可計費要求的總計值,並將其除以適用的要求數目,包括產生非預期錯誤的要求。

任何小於 100% 的值都表示某些記憶體要求失敗。 您可以檢查 ServerTimeoutError 等錯誤類型的 ResponseType 維度來查看失敗的原因。 您應該會因為暫時性伺服器逾時等原因而預期 可用性 暫時低於 100%,而服務會將分割區移至更好的負載平衡要求;用戶端應用程式中的重試邏輯應該會處理這類間歇性情況。

您可以使用 Azure 監視器中的功能,在服務的 可用性 低於您指定的閾值時發出警示。

計量顯示節流錯誤增加

當您超過記憶體服務的延展性目標時,就會發生節流錯誤。 記憶體服務會進行節流,以確保沒有單一用戶端或租使用者可以犧牲其他用戶端或租使用者來使用服務。 如需詳細資訊,請參閱 標準記憶體帳戶的延展性和效能目標 ,以取得記憶體帳戶的延展性目標,以及記憶體帳戶內數據分割的效能目標。

如果 ResponseType 維度的 ClientThrottlingErrorServerBusyError 值顯示因節流錯誤而失敗的要求百分比增加,您需要調查下列兩種案例之一:

  • PercentThrottlingError 的暫時性增加
  • PercentThrottlingError 錯誤的永久增加

節流錯誤的增加通常會隨著記憶體要求數目的增加,或一開始要對應用程式進行負載測試時發生。 這也可能會在用戶端中顯示為來自記憶體作業的「503 伺服器忙碌」或「500 作業逾時」HTTP 狀態消息。

暫時性增加節流錯誤

如果您看到節流錯誤的尖峰與應用程式的高活動期間一致,您會針對用戶端中的重試實作指數 (非線性) 輪詢策略。 備份重試可減少分割區的立即負載,並協助您的應用程式平滑流量尖峰。 如需如何使用記憶體用戶端連結庫實作重試原則的詳細資訊,請參閱 RetryOptions.MaxRetries 屬性。

注意事項

您也可能會看到節流錯誤的尖峰,與應用程式的高活動期間不一致。 最可能的原因是記憶體服務移動分割區以改善負載平衡。

永久增加節流錯誤

如果您在交易量永久增加之後,或在應用程式上執行初始負載測試時,看到節流錯誤的持續高值,則您需要評估應用程式使用記憶體分割區的方式,以及其是否接近記憶體帳戶的延展性目標。 例如,如果您在佇列上看到節流錯誤, (算為單一分割區) ,則您會考慮使用額外的佇列將交易分散到多個分割區。 如果您在數據表上看到節流錯誤,請考慮使用不同的數據分割配置,藉由使用更廣泛的分割區索引鍵值,將交易分散到多個分割區。 此問題的一個常見原因是預先附加/附加反模式,您在其中選取日期作為分割區索引鍵,然後特定日期的所有數據都會寫入到負載 (的一個分割區,這可能會導致寫入瓶頸) 。 請考慮不同的數據分割設計,或評估使用 Blob 記憶體是否可能是更好的解決方案。 此外,請檢查是否因為流量尖峰而發生節流,並調查平滑要求模式的方式。

如果您將交易分散到多個分割區,您仍然必須留意為記憶體帳戶設定的延展性限制。 例如,如果您使用10個佇列,每個佇列每秒最多處理 2,000 個 1KB 訊息,則記憶體帳戶的整體限製為每秒 20,000 則訊息。 如果您需要每秒處理超過 20,000 個實體,請考慮使用多個記憶體帳戶。 您也應該記住,當記憶體服務節流用戶端時,要求和實體的大小會受到影響。 如果您有較大的要求和實體,可能會更快地進行節流。

無效率的查詢設計也可能導致您達到數據表分割區的延展性限制。 例如,具有篩選條件的查詢只會選取分割區中百分之一的實體,但會掃描分割區中所有實體的查詢,就必須存取每個實體。 每個讀取的實體都會計入該分割區中的交易總數。 因此,您可以輕鬆地觸達延展性目標。

注意事項

您的效能測試應該會顯示應用程式中任何沒有效率的查詢設計。

計量顯示逾時錯誤增加

ResponseType 維度等於 ServerTimeoutErrorClientTimeout 時,就會發生逾時錯誤。

您的計量顯示其中一個記憶體服務的逾時錯誤增加。 同時,用戶端會收到來自記憶體作業的大量「500 作業逾時」HTTP 狀態消息。

注意事項

當記憶體服務將分割區移至新伺服器以平衡要求時,您可能會看到暫時的逾時錯誤。

ServerTimeOutError (伺服器逾時) 是由伺服器上的錯誤所造成。 用戶端逾時 (ClientTimeout) 發生,因為伺服器上的作業已超過用戶端指定的逾時。 例如,使用記憶體用戶端連結庫的用戶端可以設定作業的逾時。

伺服器逾時表示記憶體服務有問題,需要進一步調查。 您可以使用計量來查看您是否達到服務的延展性限制,並識別可能造成此問題的任何流量尖峰。 如果問題是間歇性的,可能是因為服務中的負載平衡活動。 如果問題持續發生,而且不是由您的應用程式達到服務的延展性限制所造成,您應該提出支持問題。 針對用戶端逾時,您必須決定逾時是否設定為用戶端中的適當值,並變更客戶端中設定的逾時值,或調查如何改善記憶體服務中作業的效能,例如優化數據表查詢或減少訊息大小。

計量顯示網路錯誤增加

ResponseType 維度等於 NetworkError 時,就會發生網路錯誤。 當記憶體服務在用戶端提出記憶體要求時偵測到網路錯誤時,就會發生這些錯誤。

此錯誤最常見的原因是客戶端在記憶體服務逾時到期之前中斷連線。 調查用戶端中的程式代碼,以瞭解用戶端與記憶體服務中斷連線的原因和時機。 您也可以使用第三方網路分析工具來調查來自客戶端的網路連線問題。

另請參閱

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群