Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL客户端/服务器:带ACK标志但不带PSH的TCP响应数据包_Mysql_Linux_Networking_Tcp_Protocols - Fatal编程技术网

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

MySQL客户端/服务器:带ACK标志但不带PSH的TCP响应数据包,mysql,linux,networking,tcp,protocols,Mysql,Linux,Networking,Tcp,Protocols,我有一个Linux二进制应用程序,它建立了两个到本地MySQL服务器的持久连接(使用127.0.0.1作为主机名) 每15分钟,这样的应用程序必须执行2000个单行inserts(请不要质疑数据库设计),但在将第n个insert语句发送到MySQL之后,在某一点连接B“挂起”近20秒;通过wireshark查看tcp转储,结果发现在这种上下文中,MySQL使用一个简单的ACK数据包进行响应,没有任何MySQL协议特定的部分,但实际上没有PSH标志,因此不能将其识别为正确的MySQL“respon

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

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


请说明为什么MySQL服务器使用不带PSH标志的简单ACK TCP数据包响应请求查询数据包?

TCP ACK位于TCP级别,而不是应用程序(MySQL协议)级别

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


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

PSH标志基本上没有意义,而且在任何情况下都完全由TCP堆栈管理:与MySQL无关。