【TiDB 使用环境】生产环境
【TiDB 版本】8.0.11-TiDB-v7.5.6
【操作系统】Centos
【部署方式】标准部署
执行sql语句的长度有限制么?应用端执行了一个超过30w长度的sql,报错Fatal error encountered during command execution. tidb日志设置的error级别,没有日志。
看下max_allowed_packet变量的大小
SHOW VARIABLES LIKE ‘%max_allowed_packet%’;
调整到最大试下
SET GLOBAL max_allowed_packet=10737418240;
查了,这个是默认值。集群是从v4升级到v7.5.6的。本地集群30w长度是执行没问题。
为啥弄那么长
里面是N多个insert、update语句。一次发送,可以用数据库的事务,保证全部成功或者全部失败。
TiDB 不限制 SQL 长度,但超长 SQL 容易在客户端或网络层面出错。“Fatal error encountered during command execution” 多为客户端或驱动层错误,TiDB 端日志可能无详细报错。你可以自己用命令行执行下,看是否报错,不报错的话,就排除掉 tidb 这边的原因,再去检查下应用程序端是否有其他设置
用命令行执行,命令行会拆成多个单独语句分别去执行吧,不会像应用程序那样打包一个语句去执行。因为这个语句里实际是多个insert语句和update语句。