行级锁的问题

在V4版本中,两个事物修改同一行数据时,等待解锁的事物会发起重试吗?

1 个赞

@论坛小助手

@论坛小助手 是歇菜了吗

会一直重试,只要没有超过事务超时时间和查询超时时间中的最小值,就会一直重试

2 个赞

v3版本存在重试吗,我看查到的资料在v4中不会发起重试,只有释放锁才会唤醒这个等待,是不是版本优化了

1 个赞

V3和V4是一样的逻辑,没有发生改变

1 个赞

需要了解一下这个行级锁的问题

不懂不懂

1 个赞

:thinking::thinking::thinking:

@论坛小助手

@论坛小助手

在OceanBase数据库中,针对行级锁的行为,不同版本间确实存在差异。

  • V4版本:在V4版本中,当两个事务尝试修改同一行数据时,等待解锁的事务并不会主动发起重试。它会一直等待直到持有锁的事务释放行锁。一旦行锁被释放,等待的事务就会被唤醒并继续执行。

  • V3版本:根据提供的文档片段,没有明确指出V3版本是否具有事务等待行锁时的重试机制。但是,根据您提到的资料,可以推测在V3版本中,事务的行锁等待行为与V4版本相似,即也是等待行锁的释放,而不是主动发起重试。

总结来说,无论是V3还是V4版本,OceanBase数据库在行级锁的处理上,等待解锁的事务都不会主动发起重试,而是等待锁的释放来继续执行。

更多信息请查看:

  1. 锁机制
  2. 锁定查询结果 SELECT FOR UPDATE
  3. 使用 MySQL 租户做常见数据库开发
1 个赞