0

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

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

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

4

1 回答 1

1

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

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

因此,MySQL 服务器正忙于执行您的查询,当它完成执行查询(在您的情况下出于某种原因需要 20秒) - 也许存在 I/O 争用,也许其他一些长时间运行的查询持有锁,或者由于您的查询需要完成一些其他繁重的工作。

于 2013-11-04T13:32:12.723 回答