为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】v5.0.0
【概述】 场景 + 问题概述
请问tidb 最大sql语句长度有没有限制?例如select * from xxx where name in(…), 这条语句最大可以夺长?有没有系统变量设置?谢谢!
【应用框架及开发适配业务逻辑】
【背景】 做过哪些操作
【现象】 业务和数据库现象
【问题】 当前遇到的问题
【业务影响】
【TiDB 版本】
【附件】 相关日志及监控(https://metricstool.pingcap.com/ )
若提问为性能优化、故障排查 类问题,请下载脚本 运行。终端输出的打印结果,请务必全选 并复制粘贴上传。
4 个赞
不是,这个变量控制 statement summary 显示的 SQL 字符串长度
1 个赞
以前试过in 3000多个会报错,改成3000没报了,想确认下
1 个赞
leeray
(Lileiaab)
2021 年12 月 22 日 11:51
7
mysql中 ,in语句中参数个数是不限制的。不过对整段sql语句的长度有了限制
官方解释看这 https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_allowed_packet
报文大小限制默认4M。
在tidb的代码中也有类似的限制:
// Run reads client query and writes query result to client in for loop, if there is a panic during query handling,
// it will be recovered and log the panic error.
// This function returns and the connection is closed if there is an IO error or there is a panic.
func (cc *clientConn) Run(ctx context.Context) {
const size = 4096
https://github.com/pingcap/tidb/blob/feee7c258ac7799499f561d281434b243c4fc92e/server/conn.go#L1022
6 个赞
neolithic
(Neolithic)
2021 年12 月 23 日 02:29
9
大佬,学习了,oracle也有sql文本长度限制的。。不可能无限制。。。
1 个赞
大神,为啥我测试用了几十M的sql语句都没报错,版本的v5.3.0?
1 个赞
有限制。
但是即使没有限制,我们也应该写的短一点,简单一点。
1 个赞
in需要写那么多吗?这个真报错,单元测试就可以检查出来吧
2 个赞
Gin
(Gin)
2022 年4 月 19 日 02:58
16
我曾经测试过 16MB 的 SQL 语句也可以执行呢,更长的语句我没有测试过。
1 个赞
我见过更大的。
不管数据库有没有限制,从技术的角度来说我们自身都应该限制。
1 个赞
当然mysql oracle都有限制,tidb也有。
1 个赞
张雨齐0720
(Zhangjig)
2022 年5 月 12 日 04:50
20
MySQL client 和 MySQL/TiDB Server 都有 max_allowed_packet
配额的限制,如果在使用过程中违反其中任何一个 max_allowed_packet
配额,客户端程序就会收到对应的报错。目前最新版本的 DM 和 TiDB Server 的默认 max_allowed_packet
配额都为 64M
。
官方文档有这个说明
https://docs.pingcap.com/zh/tidb/stable/dm-error-handling#原因-3
测试用的,不清楚sql的限制,实际情况也可能发生,比如select * from table where key in (1,2,3,4,5…)这样的语句
system
(system)
关闭
2022 年10 月 31 日 19:05
22
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。