两个会话的select for UPDATE为什么不阻塞?

【TiDB 版本】
Release Version: v4.0.0
Edition: Community
Git Commit Hash: 689a6b6439ae7835947fcaccf329a3fc303986cb
Git Branch: heads/refs/tags/v4.0.0
UTC Build Time: 2020-05-28 01:37:40
GoVersion: go1.13
Race Enabled: false
TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
Check Table Before Drop: false
【问题描述】
第一个会话:
START TRANSACTION;
select * from tb_customer_score where
c_no=‘0036148’ for UPDATE ;

第二个会话:
select * from tb_customer_score where
c_no=‘0036148’ for UPDATE ;
为什么不会阻塞呢?
update tb_customer_score set c_score=1 where
c_no=‘0036148’ ;
执行update会阻塞


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

https://docs.pingcap.com/zh/tidb/stable/sql-faq#tidb-是否支持-select-for-update

当前集群是否直接部署的 4.0 还是从 3.x 升级上来的?
根据链接排查下满足条件呢

第二个会话也加上start transaction就会阻塞了

加了也不行,你可以试下

直接部署的 4.0

我刚才试了一下,打开两个窗口,依次执行会话1的语句,不是每次都能阻塞。

是的,有时可以阻塞,但不是每次都可以,阻塞的几率很低

https://docs.pingcap.com/zh/tidb/stable/pessimistic-transaction#事务模式的修改方法
在理解理解悲观事务在 tidb 中的使用方式吧