9.3 9.4 9.5 9.6 10 11 12 13 14 15 Current(16) 17
问题报告 纠错本页面
49.10. 对逻辑解码的两阶段提交支持
上一页 上一级 第 49 章 逻辑解码起始页 下一页

49.10. 对逻辑解码的两阶段提交支持 #

使用基本输出插件回调(例如;begin_cb,change_cb, commit_cbmessage_cb)两阶段提交命令,像PREPARE TRANSACTION, COMMIT PREPAREDROLLBACK PREPARED不被解码。 当PREPARE TRANSACTION被忽略时,COMMIT PREPARED被解码为COMMIT, 并且ROLLBACK PREPARED被解码为ROLLBACK

为了支持两阶段命令的流,输出插件需要提供附加的回调。 有多个需要的两阶段提交回调,(begin_prepare_cb,prepare_cb, commit_prepared_cb,rollback_prepared_cbstream_prepare_cb)以及一个可选的回调(filter_prepare_cb)。

如果提供了解码两阶段提交命令的输出插件回调,那么在PREPARE TRANSACTION上,该事务的更改被解码,传递给输出插件,并调用prepare_cb回调。 这与只有在提交事务时才将更改传递给输出插件的基本解码设置不同。 准备好的事务的开始由begin_prepare_cb回调指示。

当使用ROLLBACK PREPARED回滚一个准备好的事务时,则调用rollback_prepared_cb回调,当准备好的事务使用COMMIT PREPARED提交时,则调用commit_prepared_cb回调。

可选的,输出插件还可以通过filter_prepare_cb定义过滤规则,以在两个阶段中只解码特定的事务。 这可以通过在gid上进行模式匹配或通过使用xid查找来实现。

想要解码准备好的事务的用户,需要注意以下提到的几点:

  • 如果准备的事务排它地锁定了[user]目录表,那么解码准备可以阻塞,直到主事务被提交。

  • 用此特性构建分布式两阶段提交的逻辑复制解决方案可能会死锁,如果准备好的事务排它地锁定了[user]目录表的话。 为了避免这种情况,用户必须避免在这样的事务中在编目表上加锁(例如显式的LOCK命令)。 详请参阅第 49.8.2 节


上一页 上一级 下一页
49.9. 用于逻辑解码的大事务的流 起始页 第 50 章 复制进度追踪

AltStyle によって変換されたページ (->オリジナル) /