2016-07-27 4 views
1

У меня есть база данных db на лазуре. У меня особенно тяжелый запрос, который возникает, когда я архивирую запись пользователя и все их данные.Azure DocumentDB Дросселированные запросы

Я был в плане S1 и получал исключение, указывающее, что я попадал в пределы RU/s. План S1 имеет 250.

Я решил перейти на стандартный план, который позволяет вам установить RU/s и оплатить его.

Я установил его в 500 RU/s.

Я сделал тот же запрос и вернулся и посмотрел диаграмму мониторинга.

В то время, когда я сделал это последнее тестовое задание, он сказал, что я сделал 226 запросов и 10 были дросселированы.

Почему? Я установил его в 500 RU/с. Кстати, запрос не удался.

ответ

3

Во-первых, Requests! = Request Units, поэтому ваши 226 запросов в какой-то момент заставят в течение одной секунды потребовать больше 500 единиц запроса.

API DocumentDb сообщит вам, сколько запросов на каждый запрос стоит, поэтому вы можете изучить эту клиентскую сторону, чтобы выяснить, какой запрос вызывает проблему. По моему опыту, даже простой запрос по идентификатору часто стоит, по меньшей мере, несколько RU. Как вы понимаете, какая стоимость зависит от того, какой клиентский SDK вы используете. В моем коде я добавил что-то, чтобы автоматически регистрировать все запросы, стоимость которых превышает 10 RU, поэтому я знаю и могу принять меры.

Это также случай, когда инструменты мониторинга на портале довольно неадекватны, и я знаю, что команда работает над этим; вы можете видеть только общие RU за каждые пять минут, но вы можете попытаться использовать 600 RU за одну секунду, и вы не можете увидеть это на портале.

В вашем случае у вас может быть один большой запрос, который стоит всего более 500 RU - вам будет сообщено о регистрации. В этом случае посмотрите на сгенерированный SQL, чтобы понять, почему, может быть, даже разместите его здесь.

В качестве альтернативы, это может быть кумулятивный эффект, вызванный небольшим количеством мелких запросов в маленьком временном окне. Если вы выполняете 226 запросов в ответ на одно действие пользователя (и я не знаю, есть ли у вас), то вы, вероятно, захотите пересмотреть свой проект :)

Наконец, вы можете повторить неудавшиеся запросы. Я не уверен в других SDK, но SDK .Net автоматически запрашивает запрос 9 раз перед сдачей (это может быть еще одно объяснение 229 запросов, поражающих сервер). Если ваш выбранный SDK не повторяет попытку, вы можете легко сделать это самостоятельно; сервер вернет определенный код состояния (я думаю, 429, но не могу вспомнить) вместе с инструкцией о том, как долго ждать до повторной попытки.

Пожалуйста, изучите вопросы и обновите свой вопрос, чтобы мы могли помочь.

+0

Благодарим вас за разъяснения. Это очень полезно. Я использую .NET SDK как часть веб-приложения Azure. Я уже делаю повторную попытку, и это все еще кажется неудачным. Мне нужно будет оптимизировать мой запрос. Благодаря! – user856232

+0

Автоматическая повторная попытка поддерживается только для запуска .NET SDK 1.8.0. Возможно, вы повторите попытку на наших повторных попытках, вызвав больше запросов для отправки и ограничение скорости. Я бы рекомендовал установить MaxRetryAttemptsOnThrottledRequests в 0 в вашем случае и поймать исключение 429 и занести в журнал RU, чтобы увидеть, какой запрос вызывает больше RU, и ждать retryafter время, возвращенное с сервера, до повторного выдачи того же запроса. Надеюсь, это поможет! –