谷歌云中的“在查询期间与MySQL服务器失去连接”SQL

问题描述:

我有一个奇怪的,反复出现但不是恒定的错误,我得到“2013”​​,在查询过程中与MySQL服务器失去连接。这些都是前提:谷歌云中的“在查询期间与MySQL服务器失去连接”SQL

  • 一个Python应用程序运行周围15-20minutes每隔一小时,然后停止(每小时由cron调度)

  • 应用程序是在GCE N1-highcpu-2情况下, db是与每一个包的定价计划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 
  • 上述查询连接两个表是每个ARO UND 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连接,如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,使之永久)

+0

谢谢,我补充说,我似乎并没有经历连接在启动时失去了错误,但有时它在写入过程中发生,我确信这里没有空闲连接。我将不得不进一步调查,但我可能也会触及此处指定的同时连接数限制https://cloud.google.com/sql/faq#sizeqps – 2014-11-06 08:50:48

+0

连接限制仅在启动连接时执行。在查询期间连接丢失的其他可能原因记录在http://dev.mysql.com/doc/refman/5.5/en/error-lost-connection.html。如果这种情况非常少见,则可能是由于系统启动了您的Cloud SQL实例重启。 – David 2014-11-07 22:32:57