定期的に第 2 世代 MySQL サーバーへの接続を試みると、次のエラーが発生します。
OperationalError: (2062, 'Cloud SQL socket open failed with error: Transport endpoint is not connected')
この状態は約 10 分間続き、その後消えます。
Cloud SQLに関連するこのエラーに関する唯一の言及は、接続制限に関連している可能性があるということです(https://groups.google.com/d/msg/google-cloud-sql-discuss/sdeD17oDBOQ/wtTewl4-EgAJ) ですが、インスタンスでは 1 つの TaskQueue タスク以外にはほとんど何も行われていないため、インスタンスあたりの 12 の制限に達する可能性は低いと思います (全体の制限 4k に達することは絶対にありません)。
この例外を引き起こすコードは、アプリの残りの部分と同じ DB 設定を使用し、単にSELECT
主キーで行を取得しようとしています (つまり、小さなクエリです)。
DB ログには、次のようなエラーのエントリが多数あります。
[Note] Aborted connection 39643 to db: 'my_schema' user: 'root' host: 'cloudsqlproxy~<instance_ip>' (Got an error reading communication packets)
しかし、これらは 1 日を通してかなり一貫して発生し、上記のエラーは特定の時間に約 10 分間のみ発生するため、関連があるかどうかはわかりません。
これは、第 2 世代 Cloud SQL にアップグレードした後にのみ発生しました。
他にこれを見た人や、もっと詳しい情報を知っている人はいますか?
答え1
結局、この問題の原因は、質問にリンクされている Google グループ チャットで最初に示唆された接続制限であることが判明しました。
このバグは、Pipelines API が webapp を使用し、アプリの残りの部分が Django を使用しているために発生しました。Django は自動的に接続を閉じるため、手動で処理するコードはありませんでしたが、webapp を経由して DB にアクセスするルート (Django の接続コードを使用) は開いたままになり、最終的に制限に達しました。