SQL进程挂起且状态为“Writing to net”的原因咨询
SQL进程挂起且状态为“Writing to net”的原因咨询
嘿,针对你执行SELECT /*!40001 SQL_NO_CACHE */ * FROM tblLogs;时出现进程挂起、状态显示“Writing to net”的问题,我来梳理下几个大概率的原因:
- 结果集体积过大:你这个查询是直接读取
tblLogs表的全部数据,如果这张日志表积累了大量历史数据,要传输的结果集会非常庞大。再加上你用了/*!40001 SQL_NO_CACHE */,数据库无法借助查询缓存加速,必须从磁盘实打实读取所有数据,这会进一步拉长操作时间,让进程看起来像是挂起了。 - 客户端接收/处理效率低下:“Writing to net”的核心含义是数据库正在向客户端传输查询结果,但如果客户端没有及时读取缓冲区的数据,或者处理每条数据的逻辑耗时过长(比如客户端程序要做复杂计算、写入本地文件等),就会导致MySQL的发送缓冲区被占满。这时数据库只能等待客户端取走数据后才能继续发送,进程也就卡在了这个状态。
- 网络传输存在瓶颈:如果数据库和客户端之间的网络带宽不足,或者存在延迟、丢包等网络问题,数据传输速度会被大幅限制。数据库持续尝试发送数据但无法顺利完成,就会一直停留在“Writing to net”状态,表现为进程挂起。
备注:内容来源于stack exchange,提问作者Юлия Григорьева
相关产品推荐
相关产品推荐

