Что такое транзакционный журнал
Что проверяют
Понимаете ли вы, за счёт чего база переживает падение и почему фиксация стоит дорого. Для Go-разработчика тема прикладная: на журнале держатся репликация и захват изменений.
Как отвечать
Транзакционный журнал это последовательный поток записей об изменениях. Главное правило (write-ahead logging): запись об изменении попадает на диск раньше, чем изменённая страница данных. Транзакция считается зафиксированной, когда на диск сброшена запись о её фиксации, а сами страницы могут долежать в памяти до контрольной точки.
Восстановление после сбоя идёт от последней контрольной точки: зафиксированные изменения накатываются повторно, незавершённые отбрасываются. Поэтому после аварийного останова база поднимается в согласованном состоянии.
Что ещё держится на журнале:
- репликация: реплика получает поток записей и применяет их у себя;
- восстановление на момент времени из базовой копии плюс архив журнала;
- логическое декодирование, то есть захват изменений для очередей и поисковых индексов.
Компромиссы стоит назвать сразу: синхронная фиксация даёт долговечность ценой задержки каждой записи, групповая фиксация склеивает сброс на диск для нескольких транзакций.
Для сервиса на Go вывод практичный: надёжная публикация событий делается записью в ту же транзакцию с последующей отправкой или чтением журнала, а не строчкой «записали в базу, потом отправили в брокер».
Где спотыкаются
Говорят, что журнал обеспечивает параллелизм. Параллельную работу дают версионность строк и блокировки, а журнал наоборот общая точка, куда пишут все, и при большом потоке фиксаций она становится узким местом.
Путают накат и откат при восстановлении. Повторно применяются именно зафиксированные изменения, а незавершённые транзакции откатываются или просто остаются невидимыми. Формулировка «доигрываются незаконченные операции» выдаёт пересказ чужого текста.
Отключают синхронную фиксацию ради скорости и не проговаривают цену. При потере питания теряются последние подтверждённые клиенту фиксации, а с асинхронной репликой то же самое происходит при переключении на неё. Это допустимый выбор, но он должен быть осознанным и описанным.