TiDB 查询报encoding failed 错误

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】v5.0 GA

【问题描述】SELECT DISTINCT k.country FROM tbl_kol k WHERE k.country IS NOT NULL

1105 - encoding failed
时间: 0.278s

我们有张表,查询报1105 - encoding failed,请帮忙看下是什么原因,需要如何处理

麻烦反馈下 SQL 的执行计划、表结构信息和 tidb 相关日志信息。

执行计划:

表结构如下
CREATE TABLE tbl_kol (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
platform_uid varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘平台用户ID’,
platform_account varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘平台账号’,
nickname varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘昵称’,
platform varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘’,
head_img varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘头像’,
topic json DEFAULT NULL COMMENT ‘’,
fans int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘’,
country varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘所在地区’,
home_link varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘主页链接’,
register_time int(10) DEFAULT NULL COMMENT ‘注册时间’,
last_published_time int(10) DEFAULT NULL COMMENT ‘最近发布时间’,
email json DEFAULT NULL COMMENT ‘邮箱’,
confirm_email json DEFAULT NULL COMMENT ‘确认邮箱,手动添加’,
signature text COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘’,
verified tinyint(3) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘是否验证(0 - 未验证,1 - 已验证)’,
social_links json DEFAULT NULL COMMENT ‘’,
ext_info json DEFAULT NULL COMMENT ‘’,
is_establish_cooperation tinyint(3) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘’,
create_time int(10) DEFAULT NULL COMMENT ‘创建时间’,
update_time int(10) DEFAULT NULL COMMENT ‘更新时间’,
is_disable tinyint(3) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘用户状态(0 - 正常,1 - 已禁用)’,
gender varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘性别’,
PRIMARY KEY (id) /*T![clustered_index] NONCLUSTERED */,
KEY last_published_time (last_published_time),
KEY is_disable (is_disable),
KEY is_establish_cooperation (is_establish_cooperation),
KEY country (country),
KEY fans (fans),
KEY gender (gender),
UNIQUE KEY platform (platform,home_link)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci AUTO_INCREMENT=27690527 COMMENT=‘kol表’;

tidb日志文件

我们之前的版本v4.0.9没有出现过这种问题,升级后才出现

[2021/04/16 17:27:12.152 +08:00] [INFO] [conn.go:812] [“command dispatched failed”] [conn=123471] [connInfo=“id:123471, addr:192.168.0.221:41100 status:10, collation:utf8mb4_bin, user:mduser”] [command=Execute] [status=“inTxn:0, autocommit:1”] [sql=“SELECT DISTINCT k.country FROM tbl_kol k WHERE k.country IS NOT NULL”] [txn_mode=PESSIMISTIC] [err="[tikv:10000]encoding failed\ SELECT DISTINCT k.country FROM tbl_kol k WHERE k.country IS NOT NULL\ngithub.com/pingcap/tidb/server.(*clientConn).executePreparedStmtAndWriteResult\ \t/home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/server/conn_stmt.go:243\ngithub.com/pingcap/tidb/server.(*clientConn).handleStmtExecute\ \t/home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/server/conn_stmt.go:197\ngithub.com/pingcap/tidb/server.(*clientConn).dispatch\ \t/home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/server/conn.go:1053\ngithub.com/pingcap/tidb/server.(*clientConn).Run\ \t/home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/server/conn.go:795\ngithub.com/pingcap/tidb/server.(*Server).onConn\ \t/home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/server/server.go:477\ runtime.goexit\ \t/usr/local/go/src/runtime/asm_amd64.s:1357"]

1.请问下从 v4.0.9 升级到 v5.0.0 时有调整过什么参数吗?
2.如果方便的话麻烦提供下表的统计信息,导出方法参考:https://docs.pingcap.com/zh/tidb/stable/statistics#导出统计信息

1,v4.0.9 升级到 v5.0.0 时,没改过任何参数

2,按照官方的url地址链接访问,报404 page not found错误,默认端口是2379吗

2379 是 pd 节点的默认端口,导出统计信息里面填写的是 tidb-server 的 IP 和 port

tbl_kol.json (7.7 MB)

请问下集群中有开启 new collation 功能吗?参考下:https://docs.pingcap.com/zh/tidb/stable/tidb-configuration-file#new_collations_enabled_on_first_bootstrap

可以用这个语句来查询 select * from mysql.tidb; 是否开启 new collation

嗯,开启了的

这是一个已知 bug,已经在 5.0.1 版本中修复。这 bug 会导致新写入的索引数据不正确。
可以用 admin check table 找到有问题的索引,drop 掉再重建。另外,请升级至 5.0.1。

发布5.0.1了么?在版本发布历史里没看到

过几天发

好的,感谢

通过重建索引现在已经好了,感谢

另外,这个命令看不明白是什么意思
admin check table tbl_kol

1105 - col gender, handle 1145299, index:types.Datum{k:0x5, decimal:0x0, length:0x0, i:0, collation:“utf8mb4_general_ci”, b:uint8{0x0, 0x46, 0x0, 0x45, 0x0, 0x4d, 0x0, 0x41, 0x0, 0x4c, 0x0, 0x45}, x:interface {}(nil)} != record:types.Datum{k:0x5, decimal:0x0, length:0x0, i:0, collation:“utf8mb4_general_ci”, b:uint8{0x46, 0x65, 0x6d, 0x61, 0x6c, 0x65}, x:interface {}(nil)}
时间: 29.005s

这个命令是检查表中数据和索引的一致性,可以参考下:https://docs.pingcap.com/zh/tidb/stable/sql-statement-admin-check-table-index

您好,v5.0.1 版本已经发布,可以升级后,删除索引,重建索引试试,多谢。

好的,谢谢