事务隔离问题

【 TiDB 使用环境】测试
【 TiDB 版本】7.5.2
【复现路径】java程序多线程对数据库表操作
【遇到的问题:问题现象及影响】jdbc连接。java客户端两个线程http-nio-8080-exec-4和pool-1 thread-4。时间线:线程http-nio-8080-exec-4创建连接进行一些数据库操作---- 线程pool-1 thread-4创建新的连接建表,成功后关闭连接 — 线程http-nio-8080-exec-4进行插入操作(往刚才线程pool-1 thread-4创建的表插入数据)。提示:Table doesn’t exist。
PS:1、同程序,连接切换到mysql正常。
2、尝试使用NOT_SUPPORTED,事务隔离级别也还是报Table doesn’t exist。异常。
一下是跟mysql的对比。直接用mysqlclient连:
Mysql正常:


tidb异常:

【资源配置】该问题给配置没关系,下图证明集群健康状态

【附件:截图/日志/监控】

检查连接池的配置,确保没有错误地关闭或丢弃连接。
如果这是个问题,很早就会暴漏出来的

其他操作数据库动作都能用。然成同一个线程也没问题。这点足够证明你说的配置问题和连接异常问题。


看看我新加的实验图。直接mysqlclient连的。tidb直接不行

3 4 5 操作 不显示开启事务直接建表能行不 ?

印象中好像官方文档里有描述,tidb是与mysql在这一点上有差异

试了,也不行。只要前面的连接事务开启且没结束。这个期间其他事务提交东西都不可见。

文档具体位置方便发一下吗

https://docs.pingcap.com/zh/tidb/stable/pessimistic-transaction/
与mysql差异的第4点

一下知道是怎么回事了。感谢感谢

tidb 是快照隔离,只能看到事务开始之前的数据,看不到事务开始之后的数据,但是没有理解mysql 中的行为,

tidb的rr隔离级别和mysql的rr有一些不同,一般生产建议用rc隔离级别就没你这个问题了,我测试了下rc的
image

image