SQL执行出现reading initial communication packet', system error: 0 "Internal error/check

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

  • 【TiDB 版本】:v3.0.12
  • 【问题描述】:执行一条update语句出现reading initial communication packet’, system error: 0 "Internal error/check错误,该表有350W行数据。具体语句为:
update student t1 set t1.name = t1.real_name;

您好:

   1.  请问这个报错是客户端的报错,还是日志里的报错
   2.  请问拓扑结构是什么,可以用发帖时的脚本采集上传下,多谢
   3.  麻烦反馈问题发生时间的tidb.log日志,在tidb安装目录的/log/tidb.log,多谢

结构是3PD、3KV、2DB、3Pump、1Drainer为下游file。都是分开部署的。日志文件太大了。这是部分日志 tidb.log (225.6 KB)

你好,

感谢回复,正在分析,请稍等

请提供一下访问 TiDB 的连接信息

使用navicat客户端进行连接

连接的字符串信息提供一下,例如: mysql -h xxx -p 4000 -u root

账户名:xxx 密码是:xxxxx 端口是:4000 连接地址:xxx.xxx.xx.xxx

你好,日志里面没有发现描述的 update student t1 set t1.name = t1.real_name; 相关报错。 问题现象是客户端执行这个语句,是执行过程中,客户端报这个错么?可否麻烦把这个语句执行相关的 tidb.log 上传一下

另外 3.0 版本 tidb 的 mysql.user 表没有 authentication_string 字段,query 中使用这个字段会报错

能给一下连接地址吗?

你好,

  1. 请确认,使用命令行方式执行看是否存在报错。

  2. 如果使用 Navicat,建议使用 Navicat 最新版(我刚升级的,15 了),是之前使用 Navicat 11 有类似的报错,但是并不影响 sql 执行结果。

可能是最大事物支持出现的问题。我把350W行拆开执行更新。每次更新20W没有出现这种错误。现在3.0.12版本事物支持最大是30W吗

你好,

可以看下 《tidb in action》中关于事务部分的介绍,很详细

https://book.tidb.io/session4/chapter6/transaction-statement-count-limit.html#46-tidb-中事务限制及应对方案

由于 TIDB 二阶段提交的特性,对事务大小有做限制:

  1. 单个事务包含的 SQL 语句不超过 5000 条(默认)
  2. 单条 KV entry 不超过 6MB
  3. KV entry 的总条数不超过 30w
  4. KV entry 的总大小不超过 100MB

在4.0版本中事物这方面有大的优化吗

你好

是的 4.0 的新特性中对大事务进行了优化和支持 官网:

文档: https://book.tidb.io/session1/chapter6/big-txn-in-4.0.html

在官方网站的文档中tidb的配置解释中并没有看到

txn-total-size-limit = 104857600

配置。是否是文档与tidb in action的介绍不同步呢?

你好,

抱歉,暂时可从以下链接查看,我们会持续更新官网:

https://github.com/pingcap/tidb/blob/c02e92c02f31d67da0c7c2e02031c920eb264313/config/config.toml.example#L234https://pingcap.com/docs/dev/reference/configuration/tidb-server/configuration-file/#txn-total-size-limit

幸苦了。

:heart::heart::heart: