Назад | Перейти на главную страницу

Периодические проблемы Cloud SQL при подключении OperationalError: (2062, «Ошибка открытия сокета Cloud SQL с ошибкой: конечная точка транспорта не подключена»)

Периодически при попытках подключения к серверу 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), оставляли их открытыми, что в конечном итоге привело к достижению лимита.