TiDB悲观锁模式与乐观锁模式如何理解?有哪些影响?

【 TiDB 使用环境】线上、测试、调研
【 TiDB 版本】
【遇到的问题】
【复现路径】做过哪些操作出现的问题
【问题现象及影响】

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

悲观锁模式是事务修改的数据提交之前,就要先获取到锁,类似于mysql的innodb 行锁,事务还未提交,锁就获得了,这个事务一定能够提交成功,而乐观锁是先修改数据,提交事务的时候再去获取锁,如果能够获取到锁,这个事务就提交成功,如果获取不到锁,这个事务就回滚,也就是说在乐观模式下,事务有一定的失败几率,乐观锁和悲观锁都各有适用的场景,如果业务不是那种频繁有冲突的类型,适合用乐观锁,其实赌的就是事务提交的时候会不会有冲突,如果不会有冲突,用乐观锁就赚到了

参考官方文档
https://docs.pingcap.com/zh/tidb/stable/pessimistic-transaction

大体上来说加锁的阶段不同:
乐观:客户端commit,2pc的prewrite节点才进行加锁操作,这个阶段可能会出现锁的冲突现象。

悲观:2pc之前的DML阶段就进行加锁,进入到2pc以后基本不会有锁的现象发生了。

了解了,谢谢

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。