[Critical Bug] The the update could not read the latest data if read committed is used
产品 | TiDB |
---|---|
组件 | TiDB |
版本 | 6.0.0 6.1.1 6.1.2 6.1.3 6.1.4 |
Issue
https://github.com/pingcap/tidb/issues/41581
Root Cause
TiDB 使用 RC 隔离时,point get executor 读取的时间戳没有按预期刷新,取不到最新的值。使用RC隔离级别时,执行者不会获取不存在的key的悲观锁,更新可能不会对新插入的行生效。
Diagnostic Steps
如果更新结果出乎意料,例如不会更新最新值。尝试确认:
- TiDB 版本为 v6.0、v6.1.1 -v6.1.4
- 使用 RC 隔离级别
- 使用并发插入和更新事务,更新/删除事务期望看到最新的插入结果使用
pointGetExecutor
读取
Resolution
- 避免使用版本
- v6.0
- v6.1.1 -v6.1.4
- v6.1.x版本,升级到v6.1.5版本
Workaround
-
在update/delete语句之前使用select for update锁定row key
-
禁用 RC 隔离级别,改用默认的 RR