---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ydb.tech/docs/en/reference/ydb-sdk/error_handling.md?version=main
  - https://ydb.tech/docs/ru/reference/ydb-sdk/error_handling.md?version=main
sourcePath: ru/core/reference/ydb-sdk/error_handling.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Обработка ошибок

При использовании YDB SDK возникают ситуации, в которых необходимо обрабатывать ошибки.

Ошибки можно разделить на три категории:

* <!-- source: ru/reference/ydb-sdk/_includes/tooltips/retryable.md -->
  **Временные сбои** (retryable). Включают кратковременную потерю сетевого соединения, временную недоступность или перегруженность одной из подсистем YDB, а также неспособность YDB ответить на запрос в течение установленного времени ожидания. В случае возникновения таких ошибок повторный запрос через некоторый промежуток времени с высокой вероятностью будет выполнен успешно.
  <!-- endsource: ru/reference/ydb-sdk/_includes/tooltips/retryable.md -->

* <!-- source: ru/reference/ydb-sdk/_includes/tooltips/nonretryable.md -->
  **Ошибки, которые не могут быть исправлены с помощью повтора** (non-retryable). Включают некорректно сформированные запросы, внутренние ошибки YDB, а также запросы, не соответствующие схеме данных. В такой ситуации нет необходимости повторять запрос, требуется дополнительное вмешательство разработчика.
  <!-- endsource: ru/reference/ydb-sdk/_includes/tooltips/nonretryable.md -->

* <!-- source: ru/reference/ydb-sdk/_includes/tooltips/condretryable.md -->
  **Ошибки, которые, предположительно, могут быть исправлены с помощью повтора после реакции клиентского приложения** (conditionally retryable). Возникают при идемпотентных операциях, таких как отсутствие ответа в течение отведённого времени или запрос аутентификации.
  <!-- endsource: ru/reference/ydb-sdk/_includes/tooltips/condretryable.md -->


## Обработка временных сбоев (retryable errors) {#handling-retryable-errors}

YDB SDK предоставляет [встроенный механизм обработки временных сбоев](https://ydb.tech/docs/ru/recipes/ydb-sdk/retry.md?version=main). По умолчанию в SDK используется рекомендованная политика повторов, которую можно изменить в соответствии с требованиями клиентского приложения. YDB возвращает коды завершения, позволяющие определить, уместна ли повторная попытка и какой выбрать интервал.

Операции следует повторять только в том случае, если ошибки являются временными сбоями. Не пытайтесь повторно выполнять недопустимые операции, такие как вставка в таблицу строки с существующим значением первичного ключа или вставка данных, не соответствующих схеме таблицы.

Крайне важно оптимизировать число повторных попыток и интервал между ними. Чрезмерное количество повторных попыток и слишком короткий интервал создают избыточную нагрузку. Недостаточное количество повторных попыток не позволит завершить выполнение операции.

Встроенные в SDK YDB retryer'ы используют следующие стратегии задержек повторного выполнения запросов в зависимости от статуса завершения запроса:

* **Немедленный повтор.** Повторные попытки совершаются немедленно.
* **Короткая экспоненциальная задержка.** Первоначальный интервал составляет несколько миллисекунд. Для каждой последующей попытки интервал увеличивается по экспоненциальному закону.
* **Большая экспоненциальная задержка.** Первоначальный интервал составляет несколько секунд. Для каждой последующей попытки интервал увеличивается по экспоненциальному закону.

При выборе интервала вручную обычно используются следующие стратегии:

* **Экспоненциальная задержка.** Для каждой последующей попытки интервал увеличивается по экспоненциальному закону.
* **Интервалы с приращениями.** Для каждой последующей попытки интервал увеличивается с определёнными приращениями.
* **Постоянные интервалы.** Повторные попытки совершаются через одинаковые интервалы.
* **Немедленный повтор.** Повторные попытки совершаются немедленно.
* **Случайный выбор.** Повторные попытки совершаются через случайно выбранный интервал времени.

При выборе интервала и числа повторных попыток учитывайте [статусы завершения](#status-codes) YDB.

Не используйте бесконечные повторные попытки — это может привести к избыточной нагрузке.

Не выполняйте немедленный повтор более одного раза.

Примеры кода смотрите в разделе [Выполнение повторных попыток](https://ydb.tech/docs/ru/recipes/ydb-sdk/retry.md?version=main).

## Статусы завершения {#status-codes}

Когда возникает ошибка, YDB SDK возвращает объект ошибки, который включает статусы завершения. Возвращаемый статус завершения может исходить от [сервера YDB](https://ydb.tech/docs/ru/reference/ydb-sdk/ydb-status-codes.md?version=main), [транспорта gRPC](https://ydb.tech/docs/ru/reference/ydb-sdk/grpc-status-codes.md?version=main) или самого SDK.

Статусы завершения в диапазоне 400000–400999 — это статусы завершения, полученные от сервера YDB. Смотрите [Статусы завершения сервера YDB](https://ydb.tech/docs/ru/reference/ydb-sdk/ydb-status-codes.md?version=main).

Статусы завершения в диапазоне 401000–401999 относятся к кодам, специфичным для SDK. Для получения дополнительной информации об этих статусах, относящихся к конкретному SDK, обратитесь к соответствующей документации SDK.

Для получения дополнительной информации о статусах завершения gRPC см. [документацию gRPC](https://grpc.io/docs/guides/status-codes/).

## Журналирование ошибок {#log-errors}

При использовании SDK рекомендуется записывать в журнал все ошибки и исключения:

* Журналируйте количество предпринимаемых повторных попыток. Увеличение числа регулярных повторных попыток часто указывает на наличие проблем.
* Журналируйте все ошибки, в том числе их типы, коды завершения и причины возникновения.
* Журналируйте общее время выполнения операций, включая операции, завершившиеся после повторного выполнения.

## Смотрите также

- [Каскадный эффект при частых повторных попытках](https://ydb.tech/docs/ru/troubleshooting/performance/queries/retry-cascade.md?version=main)
- [Статусы завершения gRPC](https://ydb.tech/docs/ru/reference/ydb-sdk/grpc-status-codes.md?version=main)
- [Статусы завершения сервера YDB](https://ydb.tech/docs/ru/reference/ydb-sdk/ydb-status-codes.md?version=main)
- [Ошибки](https://ydb.tech/docs/ru/faq/errors.md?version=main)
