Журналы транзакций 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 является обязательным, если вы хотите гарантировать согласованное состояние.
Если вы хотите распределенных транзакций, то вы, вероятно, хотите включить ведение журнала тоже. Отключение его действительно предназначено только для тестирования конфигураций.