2014-10-27 107 views
2

我有一個奇怪的,反覆出現但不是恆定的錯誤,我得到「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: ... 

任何想法?

回答

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,使之永久)

+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

相關問題