ob在切主的时候是否会终止事务?

【产品名称】oceanbase

【产品版本】多版本

【问题描述】ob在切主的时候是否会终止事务?

1 个赞

以下是ob在各个版本的ob在切主时的行为:

对于1.4.x版本,当发生切主时(例如:修改primary zone,轮转升级,副本搬迁等),ob会首先停止partition上避免新的事务(即停写),之后等待100ms让分区上的active事务结束,之后杀掉仍然存在的事务,把leader切换到新的副本上。

对于2.2.x 版本, 当发生切主时,ob会首先在partition上停写,之后等待30ms,让active 事务结束,之后的70ms,会通过clog把没有提交的事务context 发送到新的leader所在的observer上(即“事务搬迁”),如果在70ms之内完成了事务context的搬迁,则不会把active 事务终止,否则就会终止。

对于3.1 及之后的版本,由于ob具备了转储未提交事务的能力,在发生切主的时候,绝大部分情况下都不会终止事务了。

从客户的角度来讲,当发生切主的时候,用户的感受会是:

1.4.x版本,应用程序的DML操作会suspend 一会儿,而且可能会出现事务被终止的错误信息,用户需要在应用层进行控制。

2.2.x版本,应用程序的DML操作会suspend 一会儿,对于大部分短事务,可以平滑的切换到新的leader上。

对于3.1及后续版本,应用程序的DML操作会suspend 一会儿,绝大部分事务可以透明的切换到新的leader上。

1 个赞