原来 MySQL 的 READ-COMMITTED 隔离级别下,通过 FOR UPDATE 实现简单扣库存。迁移到 TiDB 后出现乐观锁冲突或死锁,应该如何调整应用?

原来 MySQL 的 READ-COMMITTED 隔离级别下,通过 FOR UPDATE 实现简单扣库存。迁移到 TiDB 后出现乐观锁冲突或死锁,应该如何调整应用?

1 个赞

TiDB 完全支持悲观事务,行为与 MySQL 兼容。有以下三种切换方式:

方式 作用范围 命令
全局默认 整个集群新建的 Session SET GLOBAL tidb_txn_mode = 'pessimistic';
Session 级 当前连接 SET SESSION tidb_txn_mode = 'pessimistic';
事务级 仅当前事务 BEGIN PESSIMISTIC;COMMIT;
1 个赞

试试切换为悲观事务模式,支持全局、会话、事务三种粒度按需设置。

升级前在测试环境跑业务回归,对比SQL执行计划。

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。