0

我有一个很大的查询。如果我在 localhost 上运行它需要 0.01 秒。如果我从远程连接(另一台服务器)尝试它,它根本不会运行。一般日志显示连接进入,然后没有其他内容。该查询也永远不会出现在慢查询日志中。如果我运行“显示进程列表”,它显示有一个连接,但它正在休眠,并且信息为 NULL。现在,如果我运行 tcpdump (tcpdump -i eth0 -s0 -A port 3306),查询就会显示出来……所以我知道它正在到达服务器,但它没有从那里到达 MySQL。

my.cnf 中的一些设置

key_buffer = 32M 
max_allowed_packet = 32M 
query_cache_limit = 1M 
query_cache_size = 16M 
innodb_buffer_pool_size = 32M 
innodb_log_file_size = 256M

所有这些对于查询来说都足够大了。它有一个 IN() 并在其中包含大约 400 个 ID,但我无法运行 IN (SELECT),因为该数据库上不存在该表。最奇怪的部分是它在几周前运行良好。我对 my.cnf 所做的唯一更改是:

innodb_support_xa = 0
innodb_flush_log_at_trx_commit = 0

(但这只是通过直到最后才记录来提高插入速度)

如果我缩短查询,它就会运行。这可能是 iptables 中的限制吗?也许连接到 MySQL 的服务器有一些 PHP 限制?

我完全迷失了这一点,并且装箱非常好。有任何想法吗?

4

0 回答 0