針對 Azure 記憶體帳戶中的可用性問題進行疑難解答
本文可協助您調查可用性變更(例如失敗的要求數目)。 這些可用性變更通常可以透過監視 Azure 監視器中的儲存體計量來識別。 如需在 Azure 監視器中使用計量和記錄的一般資訊,請參閱下列文章:
監視可用性
您應該透過監視可用性計量的值來監視儲存體帳戶中儲存體服務的可用性。 可用性計量包含百分比值。 其計算方式是取得總計費要求值,並將它除以適用的要求數目,包括產生非預期錯誤的要求。
任何小於 100% 的值,皆表示某些儲存體要求已經失敗。 您可以查看 ServerTimeoutError 等錯誤類型的 ResponseType 維度失敗的原因。 基於暫時性伺服器逾時等原因,您應該會看到 可用性 暫時低於 100%,而服務將分割區移至更好的負載平衡要求;用戶端應用程式中的重試邏輯應該處理這類間歇性狀況。 可用性計量僅適用於帳戶上也發生交易的時間週期。
如果服務的可用性低於您指定的閾值時,您可以使用 Azure 監視器中的功能,發出警示。
計量顯示節流錯誤增加
當超出儲存體服務的延展性目標時,會出現節流錯誤。 儲存體服務節流是為了確保沒有任何用戶端或是租用戶可犧牲其他服務來使用這項服務。 如需詳細資訊,請參閱標準儲存體帳戶的可擴縮性與效能目標,以深入了解儲存體帳戶的可擴縮性目標,以及儲存體帳戶內分割區的效能目標。
如果 ResponseType 計量的 ClientThrottlingError 或 ServerBusyError 顯示節流錯誤的失敗要求百分比增加時,您需要調查下列兩個其中一個情節:
- PercentThrottlingError 的暫時性增加
- PercentThrottlingError 錯誤中的永久性增加
節流錯誤增加通常會同時發生,因為記憶體要求數目增加,或一開始要對應用程式進行負載測試時。 當儲存體作業出現「503 伺服器忙碌」或是「500 作業逾時」狀態訊息時,用戶端也會明顯出現這個情況。
節流錯誤暫時性增加
如果您看到節流錯誤的尖峰與應用程式的高活動期間一致,您會針對用戶端中的重試實作指數式(非線性)退退策略。 輪流重試可減少分割區上的立即負載,並協助應用程式將流量尖峰平滑化。 如需有關如何使用「儲存體用戶端程式庫」實作重試原則的詳細資訊,請參閱 RetryOptions.MaxRetries 屬性。
注意
您也可以看到節流錯誤的尖峰,這些錯誤與應用程式的高活動期間不一致。 最有可能的原因是記憶體服務移動分割區以改善負載平衡。
節流錯永久性增加
如果您在交易磁碟區中持續增加,或是在應用程式上執行初始負載測試時,看到節流錯誤的一致高值,則您需要評估應用程式使用記憶體分割的方式,以及它是否接近記憶體帳戶的延展性目標。 例如,如果您在佇列上看到節流錯誤(這算為單一分割區),則請考慮使用其他佇列將交易分散到多個分割區。 如果您在數據表上看到節流錯誤,請考慮使用不同的數據分割配置,使用更廣泛的分割區索引鍵值,將交易分散到多個分割區。 此問題的一個常見原因是前面/附加反模式,您可以在其中選取日期做為分割區索引鍵,然後特定一天的所有數據都會寫入至一個分割區(在負載下,這可能會導致寫入瓶頸)。 請考慮不同的數據分割設計,或評估使用 Blob 記憶體是否可能是更好的解決方案。 此外,請檢查是否因為流量尖峰而發生節流,並調查如何順暢處理您的要求模式。
如果您將所有交易分散到多個資料分割,您必須同時注意儲存體帳戶所設定的延展性限制。 例如,如果您使用10個佇列,每個佇列每秒處理最多 2,000 個 1KB 訊息,則記憶體帳戶的整體限製為每秒 20,000 則訊息。 如果您需要每秒處理超過 20,000 個實體,請考慮使用多個記憶體帳戶。 您也應該記住,當記憶體服務對客戶端進行節流時,要求和實體的大小會受到影響。 如果您有較大的要求和實體,可能會更快進行節流。
當查詢設計不敷使用時,也會導致資料表分割到達延展性限制。 舉例來說,當查詢中的篩選器只會選取資料分割中實體的 1%,但卻會掃描資料分割中所有實體時,需要存取每個實體。 每個讀取的實體都會計入該分割區中的交易總數。 因此,您可以輕鬆地達到延展性目標。
注意
您的效能測試作業應該會顯示應用程式中任何不敷使用的查詢設計。
計量顯示逾時錯誤增加
ResponseType 維度等於 ServerTimeoutError 或 ClientTimeout 時,就會發生逾時錯誤。
您的計量顯示其中一個儲存體服務的逾時錯誤增加。 同時,用戶端從儲存體作業中收到大量的「500 作業逾時」HTTP 狀態訊息。
注意
由於儲存服務會將資料分割移至新的伺服器來達到負載平衡目的,因此可能會暫時出現逾時錯誤。
伺服器逾時是 (ServerTimeOutError) 是由伺服器上的錯誤所引起。 用戶端逾時 (ClientTimeout) 會發生,因為伺服器上的作業已超過用戶端指定的逾時。 例如,使用記憶體用戶端連結庫的用戶端可以設定作業的逾時。
伺服器逾時情況代表儲存體服務發生問題,需要進一步調查原因。 您可以使用計量,查看是否到達服務的可擴縮性限制,並找出可能引起此問題的任何流量暴增情況。 如果此問題是間歇性發生,可能是因為服務中的負載平衡活動所引起。 如果此問題持續發生,而且不是因為應用程式到達服務的點閱限制引起,則請提出支援問題。 針對用戶端逾時,您必須決定逾時是否設定為用戶端中的適當值,並變更客戶端中設定的逾時值,或調查如何藉由優化數據表查詢或減少訊息大小來改善記憶體服務中的作業效能。
計量顯示網路錯誤增加
當 ResponseType 維度等於 NetworkError 時,就會發生網路錯誤。 當儲存體服務在用戶端進行儲存體要求時偵測到網路錯誤,就會發生這類情況。
此錯誤最常見的原因,就是用戶端在儲存體服務逾時之前就中斷連線。 請調查用戶端裡的程式碼,了解用戶端何時及為何與儲存體服務中斷連線。 您還可以使用第三方網路分析工具來調查來自用戶端的網路連線問題。
另請參閱
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: