"在查询过程中与MySQL服务器的连接丢失"在Google Cloud SQL中

时间:2014-10-27 14:39:39

标签: google-cloud-sql

我有一个奇怪的,反复发生但不是常数的错误,我得到“2013,'在查询过程中失去与MySQL服务器的连接'”。这些是前提:

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

  • 该应用程序位于GCE n1-highcpu-2实例上,数据库位于带有每个包定价计划的D1上,以及以下mysql标志

max_allowed_packet    1073741824
slow_query_log    on
log_output    TABLE
log_queries_not_using_indexes on
  • 数据库仅由此应用程序和此应用程序访问,因此使用情况相同,每小时约20分钟,其他40分钟则没有任何内容

  • 它做的第一个查询是

SELECT users.user_id, users.access_token, users.access_token_secret, users.screen_name, metadata.last_id
FROM users
LEFT OUTER JOIN metadata ON users.user_id = metadata.user_id
WHERE users.enabled = 1
  • 上面的查询连接两个表,每个表大约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: ...

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您的连接闲置15分钟,您可能会看到GCE断开您的空闲TCP连接,如https://cloud.google.com/compute/docs/troubleshooting#communicatewithinternet所述。尝试该页面建议的解决方法:

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以使其永久化)