Периодически при попытках подключения к серверу MySQL 2-го поколения появляется такая ошибка:
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 экземпляров (и определенно не общего ограничения в 4 КБ).
Код, вызывающий это исключение, использует те же настройки БД, что и остальная часть приложения, и просто пытаетсяSELECT
строка по первичному ключу (так что небольшой запрос).
В журналах БД много записей об ошибке:
[Note] Aborted connection 39643 to db: 'my_schema' user: 'root' host: 'cloudsqlproxy~<instance_ip>' (Got an error reading communication packets)
но я не уверен, связаны ли они, поскольку они происходят довольно постоянно в течение дня, а указанная выше ошибка возникает только в определенное время в течение ~ 10 минут.
Это началось только после обновления до 2-го поколения Cloud SQL.
Кто-нибудь еще видел это или знает дополнительную информацию?
Оказывается, источником этого были ограничения на количество подключений, первоначально предложенные в чате групп Google, указанном в вопросе.
Ошибка возникла из-за того, что Pipelines API использует webapp, а остальная часть приложения использует Django. Поскольку Django закрывает для нас соединения, не было кода для его обработки вручную, но те маршруты, которые проходили через webapp и обращались к БД (с использованием кода соединения Django), оставляли их открытыми, что в конечном итоге привело к достижению лимита.