2016-07-27 116 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并等待从服务器返回之后重试,然后重新发出相同的请求。希望有所帮助! –