#mysql #google-cloud-functions #google-cloud-sql #broken-pipe
# #mysql #google-облачные функции #google-облако-sql #сломанная труба
Вопрос:
У меня есть различные облачные функции Google, которые записывают и считывают данные в облачную базу данных SQL (MySQL). Процессы работают, однако, когда функции запускаются одновременно, я получаю сообщение об ошибке сломанного канала. Я использую SQLAlchemy с Python, MySQL и процессы — это облачные функции, а БД — это облачная база данных Google.Я видел предлагаемые решения, которые предполагают установку более длительных значений таймаута. Мне было интересно, будет ли это хорошим подходом или есть лучший подход? Заранее спасибо за вашу помощь.
Вот ошибка сломанного канала SQL:
(pymysql.err.OperationalError) (2006, «Сервер MySQL исчез (BrokenPipeError (32, ‘Broken pipe’))») (Справочная информация об этой ошибке по адресу: http://sqlalche.me/e/13/e3q8 )
Вот значения тайм-аута MySQL:
show variables like '%timeout%';
------------------------------------------- ----------
| Variable_name | Value |
------------------------------------------- ----------
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| have_statement_timeout | YES |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_semi_sync_master_async_notify_timeout | 5000000 |
| rpl_semi_sync_master_timeout | 3000 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 30 |
| wait_timeout | 28800 |
------------------------------------------- ----------
15 rows in set (0.01 sec)
Ответ №1:
Если вы кэшируете свое соединение для повышения производительности, то вполне нормально, что через некоторое время оно будет потеряно. Чтобы предотвратить это, вам придется иметь дело с отключением.
Кроме того, поскольку вы работаете с облачными функциями, в одном экземпляре одновременно может обрабатываться только один запрос (если у вас есть 2 одновременных запроса, у вас будет 2 экземпляра). Таким образом, установите размер вашего пула равным 1, чтобы сэкономить ресурсы на стороне вашей базы данных (в случае огромного распараллеливания).