Google cloud sql &引用;查询期间与MySQL服务器的连接中断;在googlecloudsql中

Google cloud sql &引用;查询期间与MySQL服务器的连接中断;在googlecloudsql中,google-cloud-sql,Google Cloud Sql,我遇到了一个奇怪的、反复出现但不是恒定的错误,我得到了“2013,‘在查询过程中与MySQL服务器失去连接’”。这些是场所: Python应用程序每小时运行约15-20分钟,然后停止(由cron每小时安排) 该应用程序位于GCE n1-highcpu-2实例上,db位于D1上,具有每包定价计划和以下mysql标志 该数据库仅由该应用访问,且仅由该应用访问,因此使用率相同,约为每小时连续20分钟,然后在其他40分钟内完全没有 它所做的第一个查询是 上面的查询连接了两个表,每个表的长度约为

我遇到了一个奇怪的、反复出现但不是恒定的错误,我得到了“2013,‘在查询过程中与MySQL服务器失去连接’”。这些是场所:

  • Python应用程序每小时运行约15-20分钟,然后停止(由cron每小时安排)

  • 该应用程序位于GCE n1-highcpu-2实例上,db位于D1上,具有每包定价计划和以下mysql标志

  • 该数据库仅由该应用访问,且仅由该应用访问,因此使用率相同,约为每小时连续20分钟,然后在其他40分钟内完全没有

  • 它所做的第一个查询是

  • 上面的查询连接了两个表,每个表的长度约为700行,并且没有索引

  • 在这个查询之后(如果运行没有问题,则需要0.2秒),应用程序将在没有任何问题的情况下启动

查看日志,我发现每次出现此错误时,查询开始和错误之间的间隔为15分钟

我还启用了慢速查询日志,这些查询的注册方式如下:

    start_time: 2014-10-27 13:19:04
    query_time: 00:00:00
     lock_time: 00:00:00
     rows_sent: 760
 rows_examined: 1514
            db: foobar
last_insert_id: 0
     insert_id: 0
     server_id: 1234567
      sql_text: ...

有什么想法吗?

如果您的连接在15分钟间隔内处于空闲状态,您可能会看到GCE断开您的空闲TCP连接,如中所述。尝试该页面建议的解决方法:

sudo /sbin/sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5

(您可能需要将此配置放入/etc/sysctl.conf以使其永久化)

谢谢,我补充了这一点,并且我似乎在启动时不再遇到连接丢失错误,但有时它确实发生在写入过程中,我非常确定那里没有空闲连接。我将不得不进一步调查,但我可能也达到了此处所示的同时连接限制,连接限制仅在连接启动时才强制执行。查询期间连接断开的其他可能原因记录在。如果这种情况很少发生,也可能是由于系统启动了云SQL实例的重启。
    start_time: 2014-10-27 13:19:04
    query_time: 00:00:00
     lock_time: 00:00:00
     rows_sent: 760
 rows_examined: 1514
            db: foobar
last_insert_id: 0
     insert_id: 0
     server_id: 1234567
      sql_text: ...
sudo /sbin/sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5