11.2.10. XA 恢复过程的限制


XA 恢复有以下限制:

  • 可能无法从成功提交的事务中清除事务日志。

    如果 JBoss EAP 服务器在 XAResource 提交方法后崩溃并提交事务,但在协调员更新日志之前,您可能会在重启服务器时在日志中看到以下警告消息:

    ARJUNA016037: Could not find new XAResource to use for recovering non-serializable XAResource XAResourceRecord

    这是因为在恢复时,JBoss 事务管理器(TM)会在日志中看到事务参与者并尝试重试提交。最终,JBoss TM 假设资源已提交,不再重试提交。在这种情况下,您可以在提交事务时安全地忽略此警告,而且不会丢失数据。

    要防止警告,请将 com.arjuna.ats.jta.xaAssumeRecoveryComplete 属性 值设置为 true。当新的 XAResource 实例无法来自任何注册的 XAResource Recovery 实例时,就会检查此属性。当设置为 true 时,恢复假设上一提交尝试成功,并且可以在不进一步恢复尝试的情况下从日志中移除实例。此属性必须谨慎使用,因为它是全局的,使用不正确时可能会导致 XAResource 实例处于未提交状态。

    注意

    JBoss EAP 7.3 实施了增强功能,可在成功提交事务后清除事务日志,以上情况不应频繁发生。

  • 当服务器在 XAResource.prepare() 结束时崩溃时,不会在 JTS 事务中调用回滚。

    如果 JBoss EAP 服务器在完成 XAResource.prepare() 方法调用后崩溃,则所有参与的 XAResource 实例都会处于就绪状态,并在服务器重启后保持这种方式。事务不会被回滚,资源在事务超时或数据库管理员手动回滚资源并清除事务日志前保持锁定。如需更多信息,请参阅 https://issues.jboss.org/browse/JBTM-2124

  • 对已提交的事务可进行定期恢复。

    当服务器负载过量时,服务器日志可能包含以下警告信息,后跟一个 stacktrace:

    ARJUNA016027: Local XARecoveryModule.xaRecovery got XA exception XAException.XAER_NOTA: javax.transaction.xa.XAException

    在负载过重时,交易所花费的处理时间可能与定期恢复过程的活动时间重叠。定期恢复过程检测到仍在进行中的事务,并尝试启动回滚,但实际交易将继续完成。在定期恢复尝试但回滚失败时,它会在服务器日志中记录回滚失败。以后的发行版本中会解决此问题的根本原因,但目前可以使用一个临时解决方案。

    通过将 com.arjuna.ats.jta.orphanSafetyInterval 属性设置为大于默认值 10000 毫秒,以增大恢复过程的两个阶段之间的间隔。建议值为 40000 毫秒。请注意,这不会解决这个问题。相反,它会降低发生该信号的可能性,并在日志中显示警告消息。如需更多信息,请参阅 https://developer.jboss.org/thread/266729

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.