--- aliases: tags: - maturity/🌱 date: 2024-05-26 zero-link: - "[[../../meta/zero/00 Реляционная база данных]]" parents: linked: --- Журнал базы данных — это структура, в которой фиксируются все изменения, происходящие в базе данных, до их окончательного применения. Основная цель журнала — обеспечить надежность и консистентность данных. Это позволяет выполнять [[Транзакция БД|транзакции]] и [[../architecture/highload/Репликация БД|репликацию БД]]. Перед выполнением SQL-запроса база данных сначала записывает в журнал информацию о планируемых действиях, например: "Обновить значение колонки `amount` в таблице `orders` для записи с `id = 5`". После фиксации записи в журнале база данных изменяет данные в памяти, чтобы ускорить обработку операций, а затем, с некоторой задержкой, записывает их на диск в основное хранилище. Этот подход улучшает производительность за счет уменьшения количества операций записи на диск, которые являются более медленными по сравнению с изменениями в памяти. В случае сбоя системы до записи данных на диск, изменения можно восстановить из журнала. Этот алгоритм называется [[../../../../_inbox/Point In Time Recovery (PITR)|PITR]] (Point In Time Recovery). ![](Pasted%20image%2020240528081137.png) Этот процесс обеспечивает два важных аспекта: - **Надежность**: В случае сбоя системы данные можно восстановить из журнала до последнего зафиксированного состояния. - **Консистентность**: Все транзакции, записанные в журнал, будут применены в базе данных в правильном порядке, что предотвращает потерю данных и сохраняет целостность системы. **Недостатки**: - Увеличение времени записи: каждая транзакция требует предварительной записи в журнал, что может замедлить выполнение операций. - Потребление дискового пространства: журналы могут занимать значительное место, особенно в системах с высокой активностью. > [!INFO] > Журналы базы данных часто имеют циклическую структуру, где новые данные записываются поверх старых, когда журнал заполняется. Это позволяет эффективно использовать дисковое пространство и упрощает управление журналом. Реализации в СуБД: - [[postgresql/Write-Ahead Log|Журнал в PostgreSQL]] - [Журналы в MySQL](mysql/Журналы%20в%20MySQL.md) Главные вопросы, которые встают перед разработчиком любой БД: - Как организовать журнал? - Как его писать? - Как писать его меньше? - Как сделать так, чтобы это работало быстрее? - При чем тут репликация? Для повышения производительности рекомендуется выделять отдельные жесткие диски под журналы, чтобы у них был эксклюзивный доступ к ресурсам диска. Это менее актуально для SSD, так как у них значительно выше скорость чтения и записи, а также отсутствует проблема механического доступа, что делает их более эффективными для параллельной работы с данными. *** ## Мета информация **Область**:: [[../../meta/zero/00 Реляционная база данных|00 Реляционная база данных]] **Родитель**:: **Источник**:: **Автор**:: **Создана**:: [[2024-05-26]] ### Дополнительные материалы - ### Дочерние заметки - [[Write-Ahead Log]]