为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【TiDB 版本】:v3.1.1
【问题描述】:
将TiDB从v3.0.0升级到v3.1.1之后,一个在用的数据库出现了使用别名无法进行删除的情况,不使用别名可以删除。
发现问题之后尝试在其他数据库里使用别名进行删除,没有出现这个问题。将出现问题的表复制到其他数据库里进行测试,没有出现这个问题。在同一个数据库里复制出现问题的表进行测试,无法使用别名进行删除。在同一个数据库里复制其他的表进行测试,无法使用别名进行删除。
TiDB集群使用二进制部署,信息收集的脚本不能执行,tidb集群信息如下:
select tidb_version();\G
Release Version: v3.1.1
Git Commit Hash: df4c9f05c49c6b8de74083d3befc20ecd8cefbfd
Git Branch: heads/refs/tags/v3.1.1
UTC Build Time: 2020-04-30 10:25:16
GoVersion: go version go1.13 linux/amd64
Race Enabled: false
TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
Check Table Before Drop: false
上面是有问题的那个数据库里的操作,下面是把同一个表复制到另外一个数据库里的操作。
这个TiDB日志是我在有问题的数据库里使用别名进行删除前后输出的日志。
cfzjywxk
(cfzjywxk)
2020 年6 月 17 日 09:43
4
你好,麻烦贴一下 相关问题表的结构,
以及执行
explain select * from table as alias where xxx
和 explain delete from table as alias where xxx
的结果
cfzjywxk
(cfzjywxk)
2020 年6 月 17 日 10:13
6
你好,麻烦帮忙做个试验,在有问题的 database 下
执行
select * from webapi_param_remark_copy1 where id = 2;
select * from webapi_param_remark_copy1 where id = 2 and 1 = 1;
select * from webapi_param_remark_copy1 as w where id = 2;
select * from webapi_param_remark_copy1 as w where id = 2 and 1 = 1;
贴一下结果集差异
cfzjywxk
(cfzjywxk)
2020 年6 月 17 日 12:28
8
这个问题比较奇怪, select 两种执行方式都可以读到数据,但 delete 使用 tableScan 算子读不到数据但 使用 pointGet 可以。 这个 database 有做过什么其他操作么?
v3.0.0版本是没有问题的,升级到v3.1.1版本就出现了这个问题。
cfzjywxk
(cfzjywxk)
2020 年6 月 17 日 12:47
12
目前在 3.1.1 版本环境中,是否有方法可以复现这个问题,比如新建一个 database,然后创建 table 和导入数据
目前没办法复现这个问题,我把这个数据库里有问题的表复制到其他数据库里进行测试,没出现这个问题。在一些之前也有的数据库里进行测试也没发现这个问题,暂时就只发现这一个数据库有这样的问题。
cfzjywxk
(cfzjywxk)
2020 年6 月 17 日 13:11
14
了解,可能需要进行一些分析和复现尝试,有进展会及时同步到这里。
如果有其他相关的问题表现,麻烦回复到帖子或者更新到问题描述。