索引数据和表数据不一致问题

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
测试环境

【概述】 场景 + 问题概述
一张表,有一个主键字段, 对这张表的数据进行查询操作,如果查询语句的执行计划用到了主键的索引,那么查询的结果数据量100W+ , 如果查询的语句走了全表扫描, 则查询结果200W+

基本上可以肯定是主键索引和表中数据不一致导致的。
比如:select count(*) 或者 select count(主键) 结果100W
select 主键 返回所有数据 100W

       select count(其他字段) 结果200W
       select * 或者 select 其他字段返回全部数据, 结果200W

此表 OB_OBJECT_ID 为主键
image

从实际查询的数据来看,表中也确实存在重复数据,比如:

【应用框架及开发适配业务逻辑】

【背景】 做过哪些操作

之前的历史数据应该是通过 TiDB Lightning 工具导入的, 感觉重复的部分应该是工具导入造成的,但数据导入的时候,表上是有主键的。

【现象】 业务和数据库现象

无论是通过程序的jdbc或者c# mysql驱动,还是通过第三方工具,查询结果都相同。

【问题】 当前遇到的问题

【业务影响】

【TiDB 版本】
TIDBV5.3.0
【附件】 相关日志及监控(https://metricstool.pingcap.com/)


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

2 个赞

admin check table table_name试下呢

1 个赞

ligthing导入时的backend设置是什么

1 个赞

admin check table table_name 这个当表的数据量很大时,对业务会有影响吗?

1 个赞

应该是会有一定影响的,感觉和mysql的check table命令差不太多

1 个赞

1 个赞

backend 用的是 local

1 个赞

有个疑问,当 索引中有相同的值时,索引的值是怎么存储的?

1 个赞

backend 用的是 local

1 个赞

因为是测试环境,昨天试过了,确定显示不一致

1 个赞

backend

1 个赞

重建个索引呢?

1 个赞

原来表上有一个主键,一个唯一性索引,删除唯一性索引并重建,报唯一性冲突, 表中的数据是肯定重复了

1 个赞

请问集群拓扑是什么样的,感觉有点类似于这个问题,

用root用户查看下呢,看是否一致

这个可以看下这篇文档,可以看这个key的组成方式,二级索引的key组成
https://docs.pingcap.com/zh/tidb/v4.0/tidb-computing/#key-value-映射关系示例

1 个赞

拓扑:
3个pd, 3个tidb 公用3台服务器
5个tikv, 5台服务器

和上面的问题不同, 我导入了几十张表,目前就发现这一张表有问题,应该不是权限的问题。

有一种猜想啊,不知道对不对,可以先把当时dumpling的日志贴下,然后看看pd-ctl中
region check down-peer;
region check miss-peer;
等等,看看是不是有问题

导入数据有一段时间了, 日志找不到了, 这里咨询下,我们用tidb-lightning工具进行数据导入的时候,我们需要做哪些工作,以确保导入的数据是完整的?

我是主要看下三种导入模式的注意事项,然后导入成功之后看下日志最后是否是success,如果还不放心的话,可以手动做下check,analyze

感谢大神`~~~