36 lines
3.7 KiB
Markdown
36 lines
3.7 KiB
Markdown
|
---
|
|||
|
aliases:
|
|||
|
tags:
|
|||
|
- maturity/🌱
|
|||
|
date: 2024-11-05
|
|||
|
---
|
|||
|
## Тезисы
|
|||
|
- Долгая транзакция — это незавершенная транзакция, которая может удерживать старую точку восстановления и препятствовать работе Autovacuum.
|
|||
|
- Проблемы, вызванные долгими транзакциями: блокировка данных, нарушение процесса очистки таблиц, увеличение объема данных.
|
|||
|
- Причины: ошибки в приложении, не обработанные исключения, человеческий фактор.
|
|||
|
- Рекомендации: мониторинг и внешняя автоматизация завершения долгих транзакций.
|
|||
|
***
|
|||
|
**Долгая транзакция** — это транзакция, которая была начата, но не завершена, и остается открытой, даже если в данный момент не выполняет действий. Такая транзакция удерживает точку восстановления (oldest transaction ID), что приводит к тому, что PostgreSQL должен хранить данные для поддержания целостности состояния на момент её открытия. Это удерживание мешает процессу [[postgresql/Autovacuum|Autovacuum]] очищать неактуальные строки, так как они могут быть необходимы для поддержания целостности базы в случае завершения этой старой транзакции.
|
|||
|
|
|||
|
**Причины появления долгих транзакций**
|
|||
|
1. **Внешний вызов**: В рамках транзакции в базе данных выполняется вызов внешнего процесса, который завершается с ошибкой, оставляя транзакцию открытой.
|
|||
|
2. **Отсутствие обработки ошибок**: Если приложение не обрабатывает исключения, возникшие в ходе выполнения логики внутри транзакции, это может оставить транзакцию незавершенной.
|
|||
|
3. **Человеческий фактор**: Открыли транзакции вручную через консоль и забыли её завершить.
|
|||
|
|
|||
|
**Как решать проблему долгих транзакций?**
|
|||
|
1. **Настройка мониторинга и алертов**: Настройте мониторинг и установите порог длительности транзакции, после которого её продолжительное существование вызывает оповещение. В большинстве продакшн-систем это время обычно составляет 1 час или меньше.
|
|||
|
2. **Автоматическое завершение долгих транзакций**.
|
|||
|
***
|
|||
|
## Мета информация
|
|||
|
**Область**:: [[../../meta/zero/00 Базы Данных|00 Базы Данных]]
|
|||
|
**Родитель**:: [[Транзакция БД]]
|
|||
|
**Источник**::
|
|||
|
**Создана**:: [[2024-11-05]]
|
|||
|
**Автор**::
|
|||
|
### Дополнительные материалы
|
|||
|
-
|
|||
|
|
|||
|
### Дочерние заметки
|
|||
|
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
|||
|
|