MySQL客户端/服务器:带有ACK标志但没有PSH的TCP响应数据包

时间:2013-11-04 13:24:40

标签: mysql linux networking tcp protocols

我有这个Linux二进制应用程序,它建立了与本地MySQL服务器的2个持久连接(使用127.0.0.1作为主机名)。

这样的应用程序每15分钟必须执行2000行单insert(请不要质疑数据库设计),但是在某个点上连接B“挂起”将近20秒在向MySQL发送第n个insert语句之后;通过wireshark查看tcp转储,事实证明,在这种情况下,MySQL使用简单的ACK数据包进行响应,没有任何MySQL协议特定部分,但确实没有PSH标志,因此它不被识别为正确的MySQL“响应OK”消息

有人可以说明MySQL服务器使用简单的ACK TCP数据包响应请求查询数据包而没有PSH标志的原因吗?

1 个答案:

答案 0 :(得分:1)

TCP ack处于TCP级别,而不是应用程序(mysql协议)级别。

TCP堆栈ACK是您发送的数据。这意味着它已成功接收数据,并可能将数据传递给用户(在您的情况下为mysql服务器)。

所以MySQL服务器正在忙着执行你的查询,当它完成执行查询时它将返回一个应用程序响应(你正在寻找的MySQL“响应OK”消息)(在你的情况下由于某种原因或者另一个需要20秒) - 可能存在I / O争用,也许一些其他长时间运行的查询持有锁,或者由于您的查询需要完成其他一些繁重的工作。