digital-garden/dev/database/Долгая транзакция.md
Struchkov Mark 516c330dc2
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone Build is failing
Обновление
2024-11-08 23:37:40 +03:00

3.7 KiB
Raw Blame History

aliases tags date
maturity/🌱
2024-11-05

Тезисы

  • Долгая транзакция — это незавершенная транзакция, которая может удерживать старую точку восстановления и препятствовать работе Autovacuum.
  • Проблемы, вызванные долгими транзакциями: блокировка данных, нарушение процесса очистки таблиц, увеличение объема данных.
  • Причины: ошибки в приложении, не обработанные исключения, человеческий фактор.
  • Рекомендации: мониторинг и внешняя автоматизация завершения долгих транзакций.

Долгая транзакция — это транзакция, которая была начата, но не завершена, и остается открытой, даже если в данный момент не выполняет действий. Такая транзакция удерживает точку восстановления (oldest transaction ID), что приводит к тому, что PostgreSQL должен хранить данные для поддержания целостности состояния на момент её открытия. Это удерживание мешает процессу postgresql/Autovacuum очищать неактуальные строки, так как они могут быть необходимы для поддержания целостности базы в случае завершения этой старой транзакции.

Причины появления долгих транзакций

  1. Внешний вызов: В рамках транзакции в базе данных выполняется вызов внешнего процесса, который завершается с ошибкой, оставляя транзакцию открытой.
  2. Отсутствие обработки ошибок: Если приложение не обрабатывает исключения, возникшие в ходе выполнения логики внутри транзакции, это может оставить транзакцию незавершенной.
  3. Человеческий фактор: Открыли транзакции вручную через консоль и забыли её завершить.

Как решать проблему долгих транзакций?

  1. Настройка мониторинга и алертов: Настройте мониторинг и установите порог длительности транзакции, после которого её продолжительное существование вызывает оповещение. В большинстве продакшн-систем это время обычно составляет 1 час или меньше.
  2. Автоматическое завершение долгих транзакций.

Мета информация

Область:: ../../meta/zero/00 Базы Данных Родитель:: Транзакция БД Источник:: Создана:: 2024-11-05 Автор::

Дополнительные материалы

Дочерние заметки