【 TiDB 使用环境】生产
【 TiDB 版本】5.4 k8s环境
【遇到的问题】
10亿级数据表,共4个索引,其中一个三字段的联合索引使用admin check index 报错,在半个多月前未出现(相同tidb版本),本次在做数据库新集群以及数据导出还原迁移后,做索引检查时,提示索引数据与record中数据不等报错,重建一次索引后依然报错,怀疑为系统bug。
【复现路径】
新建一个5.4的tidb集群环境,将原集群数据使用dumpling导出(原集群后来检查也有同样问题),并在当前集群中导入,检查admin check index 失败,删除索引后重建索引,然后admin check index 同样失败,其它三个索引检查均正确。
【问题现象及影响】
执行admin check index member_0501 uk2_orgId_idNumber_idNumType;
报错为:
ERROR 8134 (HY000): col document_type, handle 7775021743, index:types.Datum{k:0x1, decimal:0x0, length:0x0, i:7274496, collation:"", b:[]uint8(nil), x:interface {}(nil)} != record:types.Datum{k:0x1, decimal:0x0, length:0x0, i:111, collation:"", b:[]uint8(nil), x:interface {}(nil)}, compare err:<nil>
通过主键查询结果为:
通过索引查询为:
从上面查询理解索引也是能正常进行查询的,然后对tikv数据进行了一些查看。例如错误中的数字:7274496转换为十六进制为0x6F0000,其中6F,刚好对应document_type字段真实数据为111,给人感觉是内存对齐哪里出错了。
对底层tikv的数据做了些查看:
/tikv-ctl ldb --db=/var/lib/tikv/db --column_family=write scan --hex --from=0x7A748000000000000AFFF05F69 --to=0x7A748000000000000AFFF05F69FF
得出的数据用tablecodec.DecodeRow方法正常解析。
/tikv-ctl ldb --db=/var/lib/tikv/db --column_family=write scan --hex --from=0x7A748000000000000AFFF05F698000000000FF0000050380000000FF0006A961 --to=0x7A748000000000000AFFF05F698000000000FF0000050380000000FF0006A961FF
上面语句然后grep对应主键的二进制信息得到了索引key信息:
748000000000000AFFF05F698000000000FF0000050380000000FF0006A96101343431FF3930303139FF3833FF303631313435FF35FF32000000000000F9FF0380000000000000FF6F00000000000000F8F9FDF5351EA7FFFC
代码解析出来正确:
以上为其中一个错误,多次执行admin check index也会有不同的错误如下:
MySQL [cqgl_prod]> admin check index member uk2_orgId_idNumber_idNumType;
ERROR 8134 (HY000): col document_type, handle 1384773020, index:types.Datum{k:0x1, decimal:0x0, length:0x0, i:111, collation:"", b:[]uint8(nil), x:interface {}(nil)} != record:types.Datum{k:0x1, decimal:0x0, length:0x0, i:476741369967, collation:"", b:[]uint8(nil), x:interface {}(nil)}, compare err:<nil>
其中是record值错误的为:476741369967,16进制为:0x6F0000006F,也与111的真实值有相关关系。
根据以上信息,我自己判断索引和数据的原始信息应该没有损坏或者异常,而且只是针对这个索引出现了admin check index失败情况,怀疑是否为隐藏bug,各位大佬帮助判断一下,谢谢大家!
附件是建表语句以及自己scan的表meta信息看是否有帮助,需要什么信息辅助判断请留言。
建表语句.txt (2.4 KB) table_schema.txt (38.1 KB)