---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://ydb.tech/docs/en/troubleshooting/performance/queries/transaction-lock-invalidation.md?version=v25.3
  - https://ydb.tech/docs/ru/troubleshooting/performance/queries/transaction-lock-invalidation.md?version=v25.3
  - href: ru/troubleshooting/performance/queries/transaction-lock-invalidation.md
    type: text/markdown
    title: Markdown version
  - href: ../../../llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/troubleshooting/performance/queries/transaction-lock-invalidation.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Инвалидация блокировок транзакций

YDB использует [optimistic concurrency control](https://en.wikipedia.org/wiki/Optimistic_concurrency_control) для обнаружения конфликтов с другими выполняющимися транзакциями. Если проверка блокировок в стадии коммита обнаруживает конфликтующие изменения, транзакция откатывается и должна быть выполнена заново. В этом случае YDB возвращает ошибку `transaction locks invalidated`. Повторное выполнение значительного количества транзакций может замедлить ваше приложение.

{% note info %}

YDB SDK предоставляет встроенный механизм обработки временных ошибок. Подробнее см. [Обработка ошибок](https://ydb.tech/docs/ru/reference/ydb-sdk/error_handling.md?version=v25.3).

{% endnote %}


## Диагностика

<!-- The include is added to allow partial overrides in overlays  -->
<!-- source: ru/troubleshooting/performance/queries/_includes/transaction-lock-invalidation.md -->
1. Откройте панель мониторинга **[DB overview](https://ydb.tech/docs/ru/reference/observability/metrics/grafana-dashboards.md?version=v25.3#dboverview)** в Grafana.

1. Проверьте, есть ли всплески количества ошибок на диаграмме **Transaction Locks Invalidation**.

    ![](_assets/transactions-locks-invalidation.png)

    Эта диаграмма отображает количество запросов в секунду, возвращаемых с ошибкой «transaction locks invalidation».
<!-- endsource: ru/troubleshooting/performance/queries/_includes/transaction-lock-invalidation.md -->

## Рекомендации

Примите во внимание следующие рекомендации:

- Чем дольше длится транзакция, тем выше вероятность возникновения ошибки `transaction locks invalidated`.

    По возможности избегайте [интерактивных транзакций](https://ydb.tech/docs/ru/concepts/glossary.md?version=v25.3#interactive-transaction). Лучшим подходом является использование одного YQL-запроса с командами `BEGIN;` и `COMMIT;` для выбора данных, обновления данных и выполнения коммита транзакции.

    Если без интерактивных транзакций не обойтись, выполняйте коммит транзакции в последнем запросе.

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

    Например, если одна строка с общим балансовым значением часто обновляется, разделите эту строку на сто строк и рассчитайте общий баланс как сумму этих строк. Это значительно сократит количество ошибок `transaction locks invalidated`.
