我尝试在实时数据库服务器上运行数据迁移查询,一分钟后,由于“连接数过多”,我无法通过命令行连接到 MySQL。我不得不终止查询并重新启动 MySQL。我不会再在白天尝试在实时系统上运行这样的查询了 :)
同样的查询在生产服务器的低流量副本上花费不到两分钟,并且顺利完成。
服务器的流量是否可能导致该查询停滞?
答案1
我有一种预感,您遇到的问题与 FLUSH TABLES 或 LOCK TABLES 有关,假设您正在使用 mysqldump 或类似程序进行迁移。不带 --single-transaction 的 mysqldump 假定 MyISAM 表类型并锁定表以防止在转储时进行任何新写入,以便您获得一致的快照。如果您正在使用 InnoDB 表并打开 --single-transaction,则执行的第一个查询之一是 flush tables,它会关闭并重新打开数据库中的所有表,以便您获得跨表的一致快照。两者都可能导致传入查询堆积起来等待锁释放,但在负载较轻的副本上可能不会引人注目。