将TiDB从v3.0.0升级到v3.1.1之后部分数据库无法使用别名进行删除。

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v3.1.1
  • 【问题描述】:
    将TiDB从v3.0.0升级到v3.1.1之后,一个在用的数据库出现了使用别名无法进行删除的情况,不使用别名可以删除。
    jietu
    发现问题之后尝试在其他数据库里使用别名进行删除,没有出现这个问题。将出现问题的表复制到其他数据库里进行测试,没有出现这个问题。在同一个数据库里复制出现问题的表进行测试,无法使用别名进行删除。在同一个数据库里复制其他的表进行测试,无法使用别名进行删除。

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
  1. 您是使用某个图行界面执行的吗? 方便使用命令行操作执行下,反馈下报错吗?
  2. 麻烦反馈tidb.log 日志,在执行时是否有报错,多谢。
  3. 同时方便演示其他数据库中可以正常使用的截图吗?


上面是有问题的那个数据库里的操作,下面是把同一个表复制到另外一个数据库里的操作。


这个TiDB日志是我在有问题的数据库里使用别名进行删除前后输出的日志。

你好,麻烦贴一下 相关问题表的结构,
以及执行
explain select * from table as alias where xxx
和 explain delete from table as alias where xxx
的结果


你好,结果是这样的。

你好,麻烦帮忙做个试验,在有问题的 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;

贴一下结果集差异


结果是这样的。

这个问题比较奇怪, select 两种执行方式都可以读到数据,但 delete 使用 tableScan 算子读不到数据但 使用 pointGet 可以。 这个 database 有做过什么其他操作么?

v3.0.0版本是没有问题的,升级到v3.1.1版本就出现了这个问题。

我复制过其他表来测试,也有这样的情况。

目前在 3.1.1 版本环境中,是否有方法可以复现这个问题,比如新建一个 database,然后创建 table 和导入数据

目前没办法复现这个问题,我把这个数据库里有问题的表复制到其他数据库里进行测试,没出现这个问题。在一些之前也有的数据库里进行测试也没发现这个问题,暂时就只发现这一个数据库有这样的问题。

了解,可能需要进行一些分析和复现尝试,有进展会及时同步到这里。
如果有其他相关的问题表现,麻烦回复到帖子或者更新到问题描述。

好的,感谢。

:ok_hand: