sql 执行报错:Fatal error encountered attempting to read the resultset

tidb32.log (216.9 KB) tidb33.log (130.6 KB) tidb34.log (296.7 KB)

也是没有详细的信息可以参考,如果是 tidb 这边导致查询无法进行,一般会有 log 产生,

请问是否可以将程序运行的 sql 摘抄出来,在 shell 中运行下,看是否会有相关的报错。

shell下运行了,没问题。sql语句格式是这样的:
insert ……;
update……;
insert ……;
update……;
insert ……;
update……;
这就导致在shell里是一条一条执行的,而程序通过JDBC调用数据库是把拼接的语句一起发过去执行的。我感觉这里是没有可比性。

这里不是一个语句慢,我下周找个大语句试一下,看看两者运行有没有不同,会不会触发这个报错。

今天辛苦啦,周末愉快!

从日志看
[2020/07/24 10:39:29.426 +08:00] [WARN] [conn.go:726] [“command dispatched failed”] [conn=27799] [connInfo=“id:27799, addr:192.168.1.31:44248 status:10, collation:utf8_general_ci, user:root”] [command=Query] [status=“inTxn:0, autocommit:1”] [sql=""] [txn_mode=PESSIMISTIC] [err=“write tcp 192.168.1.34:4000->192.168.1.31:44248: write: broken pipe\ngithub.com/pingcap/errors.AddStack\ \t/home/jenkins/agent/workspace/tidb_v4.0.0-rc/go/pkg/mod/github.com/pingcap/errors@v0.11.5-0.20190809092503-95897b64e011/errors.go:174\ github.com/pingcap/errors.Trace\ \t/home/jenkins/agent/workspace/tidb_v4.0.0-rc/go/pkg/mod/github.com/pingcap/errors@v0.11.5-0.20190809092503-95897b64e011/juju_adaptor.go:15\ github.com/pingcap/tidb/server.(*packetIO).flush\ \t/home/jenkins/agent/workspace/tidb_v4.0.0-rc/go/src/github.com/pingcap/tidb/server/packetio.go:172\ngithub.com/pingcap/tidb/server.(*clientConn).flush\ \t/home/jenkins/agent/workspace/tidb_v4.0.0-rc/go/src/github.com/pingcap/tidb/server/conn.go:945\ngithub.com/pingcap/tidb/server.(*clientConn).writeOkWith\ \t/home/jenkins/agent/workspace/tidb_v4.0.0-rc/go/src/github.com/pingcap/tidb/server/conn.go:978\ngithub.com/pingcap/tidb/server.(*clientConn).writeOK\ \t/home/jenkins/agent/workspace/tidb_v4.0.0-rc/go/src/github.com/pingcap/tidb/server/conn.go:950\ngithub.com/pingcap/tidb/server.(*clientConn).handleQuery\ \t/home/jenkins/agent/workspace/tidb_v4.0.0-rc/go/src/github.com/pingcap/tidb/server/conn.go:1300\ngithub.com/pingcap/tidb/server.(*clientConn).dispatch\ \t/home/jenkins/agent/workspace/tidb_v4.0.0-rc/go/src/github.com/pingcap/tidb/server/conn.go:897\ngithub.com/pingcap/tidb/server.(*clientConn).Run\ \t/home/jenkins/agent/workspace/tidb_v4.0.0-rc/go/src/github.com/pingcap/tidb/server/conn.go:711\ngithub.com/pingcap/tidb/server.(*Server).onConn\ \t/home/jenkins/agent/workspace/tidb_v4.0.0-rc/go/src/github.com/pingcap/tidb/server/server.go:415\ runtime.goexit\ \t/usr/local/go/src/runtime/asm_amd64.s:1357”]
[2020/07/24 10:39:29.426 +08:00] [ERROR] [terror.go:363] [“encountered error”] [error=“write tcp 192.168.1.34:4000->192.168.1.31:44248: write: broken pipe”]

TiDB 在回复 client ok packtet 的时候,connection 已经被 close 了,需要调整增大 client 端驱动超时配置,比如设置

cmd.CommandTimeout = 86400;

参数,看下是否 client 仍然报错

好的,我这边测试一下,谢谢

好的 :+1:

hi,请问下,修改

cmd.CommandTimeout = 86400;

是否有解决问题呢。

我自己写了一个demo,加上这个参数之后是解决了,还没在框架中验证。

现在发现好像是负载的问题,数据库连接指向负载,就报那个错误,连接到某个节点数据库,就不报错。。。还在继续检查

确认了,就是负载均衡的问题,haproxy负载均衡的参数timeout queue调大就可以了。

timeout queue 1m:当上游服务器在高负载响应haproxy时,会把haproxy发送来的请求放进一个队列中,timeout queue定义放入这个队列的超时时间。

net_write_timeout 参数也要同步修改

:call_me_hand:

这里有个疑问,感觉net_write_timeout参数的单位不是秒,设置为600或60时,连接会60秒超时,设置为6000时,就不会超时,很奇怪。 相同的语句,语句实际执行时间大概120秒。

关注下服务器的 tcp 链接是否有限制呢

已经从项目上撤回来了,后期有机会我关注一下

:grinning:

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。