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) 그러나 하나의 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)
하지만 하루 종일 꽤 일관되게 발생하고 위의 오류는 특정 시간에 ~10분 동안만 발생하기 때문에 관련이 있는지 확실하지 않습니다.
이는 2세대 Cloud SQL로 업그레이드한 후에만 시작되었습니다.
다른 사람이 이것을 보았거나 더 많은 정보를 알고 있습니까?
답변1
이 문제의 원인은 질문에 링크된 Google 그룹스 채팅에서 원래 제안한 대로 연결 제한 때문인 것으로 나타났습니다.
Pipelines API는 webapp을 사용하고 나머지 앱은 Django를 사용하기 때문에 버그가 나타났습니다. Django는 우리를 위해 연결을 닫으므로 이를 수동으로 처리할 코드가 없었지만 webapp을 통과하고 DB에 액세스한 경로(Django의 연결 코드를 사용하여)는 연결을 열어두어 결국 제한에 도달하게 되었습니다.