Cloud SQL の接続に関する定期的な問題 OperationalError: (2062、「Cloud SQL ソケットのオープンに失敗しました。エラー: トランスポート エンドポイントが接続されていません」)

Cloud SQL の接続に関する定期的な問題 OperationalError: (2062、「Cloud SQL ソケットのオープンに失敗しました。エラー: トランスポート エンドポイントが接続されていません」)

定期的に第 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 の接続コードを使用) は開いたままになり、最終的に制限に達しました。

関連情報