Журналы транзакций Atomikos com.atomikos.icatch.enable_logging=false

Я хотел бы понять, будут ли возможности распределенных транзакций работать для моего приложения, если я установлю com.atomikos.icatch.enable_logging=false Правильно ли я понимаю, что восстановление транзакций актуально в тех случаях, когда произошел сбой, и мы хотим полностью перезапустить ту же транзакцию. Работает ли восстановление в рамках одной распределенной транзакции?

Мое приложение терпимо к сбоям с точки зрения того, что сбой всегда можно просто перезапустить с самого начала с новой транзакцией. Означает ли это, что в моем случае это нормально, чтобы установить com.atomikos.icatch.enable_logging=false

Можно com.atomikos.icatch.enable_logging=false привести к несогласованному состоянию базы данных, если не все участники распределенных транзакций были зафиксированы?

Обновление Я был вызван после этой проблемы, чтобы узнать немного больше о внутренностях распределенных транзакций, которые я описал здесь: Как бы вы настроили распределенную ( XA) транзакцию для производительности?

2 ответа

Решение

Ну, мне потребовалось некоторое время, чтобы понять это. Ответ НЕТ, если мы отключим com.atomikos.icatch.enable_logging, мы не сможем гарантировать согласованность транзакций и в конечном итоге некоторые вещи будут зафиксированы в одной базе данных, а не зафиксированы в другой.

В транзакции XA у нас есть две основные роли. Координатор транзакции и участник транзакции. Здесь задействованы два журнала транзакций. Журнал транзакций Cooridnator с одной стороны и журнал транзакций участника.

Что происходит, так это то, что сначала все участники транзакции XA регистрируются в координаторе.Затем XA_START следует за фазой записи, когда все операторы sql направляются разным участникам. X_END отмечает конец этого процесса и момент, когда с точки зрения приложения вызывается фиксация.

В этот момент Координатор транзакций берет на себя управление за кулисами. ПОДГОТОВИТЬ сообщение отправляется каждому участнику. Каждый участник отвечает READ TO COMMIT или ABORT, сообщение отправляется в журналы. Если все участники отвечают COMMIT. Вызов коммита отправляется каждому участнику.

Это означает, что если происходит сбой, и ведение журнала транзакций отключено на стороне координатора, то есть Atomikos, то существует реальная вероятность того, что один участник удастся выполнить COMMIT, а другой участник не сможет выполнить коммит.

По сути, com.atomikos.icatch.enable_logging является обязательным, если вы хотите гарантировать согласованное состояние.

Если вы хотите распределенных транзакций, то вы, вероятно, хотите включить ведение журнала тоже. Отключение его действительно предназначено только для тестирования конфигураций.

Другие вопросы по тегам