2pc流程以及锁释放时机疑问

1695267065465
OB3.1版本中的2pc是这种流程吗?还是4.0才是这种流程,还有就是在3.1和4.几中的锁释放时机是在什么阶段。

ob3.1也是这种流程;ob3.1释放锁的时机是在同步完commit日志之后,开启提早释放锁之后单机事务是在递交comit日志(未同步)之后,分布式事务没有提早释放锁,4.x默认开启单机提早释放锁,同样也不支持分布式事务。


官方文档咋是这样的图,少了很多过程
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000035721

1 个赞

是的,官方文档做了简化

官方文档缺少对2pc比较详细的描述

关于提前释放锁:单机事务的话不是说优化为1pc了吗?2pc不是对于分布式事务来说的吗?我在社区曾经提过关于热点行更新能力的分布式事务的解锁时机,其灵这个人回复说是在pre commit之后,推高版本号,然后就把锁释放掉,那如果不支持分布式事务的话,这样的解锁时机又有什么用呢?

单机事务可以优化为1PC,同时也有提前解行锁优化。分布式事务的提前解行锁功能暂时没有支持,但是在后续版本中有规划。

即使只支持单机事务也是有必要的吧,如果用户只对一个分区的热点数据有频繁更新的需求(这个需求也还挺普遍的),那么提前解行锁性能提升还是很显著的

ELR支持的单机事务是指的下图中的单分区事务吗?还是包括红框里的,如果只是单分区事务的话,就没有参与者了吧,那在pre commit提交之后释放锁也就无从谈起,也就不存在在2pc上的解锁时机。

能在2PC上实现,但是不支持分布式事务,有点想不明白是为什么,是因为跨机网络延时增加而导致级联回滚的数量增加,影响性能吗?

1 个赞

是有必要的,但是单机事务直接走1pc不会更快吗?何必走2pc再使用ELR呢,直接在1PC后使用ELR性能不更好吗?

1pc和elr不冲突的,一个是共识提交协议,一个是解行锁时机提前。elr就是在共识还没有完成的时候解行锁

想起一个问题,想请教一下。在不使用ELR的情况下,锁的释放时间是在参与者写clear日志还是写commit 日志后解锁

commit 就可以,不用等clear

提前解行锁,是在应用发起commit之前就可以把锁释放掉。网上也有一些关于ELR的文章,这个与1PC和2PC都没有直接的关系。

mark

请问一下,目前ob支持的单机事务是指的单分区事务,还是包括单机多分区事务