2016-07-27 68 views
1

我在azure上有一個文檔db數據庫。當我存檔用戶記錄及其所有數據時,會發生特別嚴重的查詢。Azure DocumentDB限制請求

我是在S1計劃,會得到一個例外,表明我正在達到RU/s的限制。 S1計劃有250.

我決定切換到標準計劃,讓您設置RU/s並支付。

我將它設置爲500 RU/s。

我做了同樣的查詢,然後回去看看監控圖。

當時我做了這個最新的查詢測試,它說我做了226個請求,10個被扼殺。

這是爲什麼?我將它設置爲500 RU/s。順便提一下,查詢失敗了。

回答

3

首先,請求!=請求單元,因此您的226個請求將在某個時間點導致在一秒鐘內需要超過500個請求單元。

DocumentDb API會告訴您每個請求的成本有多少個RU,因此您可以檢查該客戶端以找出哪個請求導致該問題。根據我的經驗,即使是簡單的按需付費請求,通常也會花費至少幾個RU。 您如何看到成本取決於您使用的客戶端SDK。在我的代碼中,我添加了一些內容來自動記錄所有花費超過10 RU的請求,這樣我就可以採取行動了。

門戶網站的監控工具還不夠完善,我知道團隊正在爲此工作;您只能每隔五分鐘查看總RU,但您可能會嘗試在一秒鐘內使用600 RU,並且您無法在門戶中真正看到。

就你而言,你可能有一個大的查詢只需花費超過500 RU - 日誌記錄會告訴你。在這種情況下,查看生成的SQL以查明原因,甚至可能將其發佈到此處。

或者,它可能是許多小的請求在小時間窗內被觸發的累積效應。如果您對一個用戶操作做出226個請求(並且我不知道您是否是),那麼您可能需要重新考慮您的設計:)

最後,您可以重試失敗的請求。我不確定其他SDK,但.Net SDK在放棄之前自動重試請求9次(這可能是對請求觸發服務器的229次請求的另一種解釋)。 如果您選擇的SDK不重試,您可以輕鬆地自行完成;服務器將返回一個特定的狀態碼(我想429但不能完全記住)以及重試之前等待多久的指令。

請檢查查詢並更新您的問題,以便我們可以進一步提供幫助。

+0

謝謝你的解釋。這非常有幫助。我使用.NET SDK作爲Azure Web應用程序的一部分。我已經在重試,它似乎仍然失敗。我將不得不優化我的查詢。謝謝! – user856232

+0

僅在啓動.NET SDK 1.8.0時支持自動重試。您可能會在重試時重試,導致發送更多請求並限制速度。我建議在您的情況下將MaxRetryAttemptsOnThrottledRequests設置爲0,並捕獲429異常並記錄RU以查看哪些查詢導致更多RU並等待從服務器返回之後重試,然後重新發出相同的請求。希望有所幫助! –