Нужно ли вручную закрывать соединения Sequel gem при использовании Net::SSH::Gateway?

Я использую гем Sequel для подключения к базе данных. Однако сервер БД удален, поэтому сначала мне нужно войти в систему через SSH.

Мой сценарий Ruby настроен на каждые пять минут SSH, пингование базы данных, а затем закрытие SSH-соединения. (SSH обрабатывается Net::SSH::Gateway.)

Но недавно я получил ошибку «слишком много подключений» в MySQL. При проверке списка процессов MySQL я обнаружил кучу спящих соединений из скрипта Ruby. Поэтому я добавил в свой скрипт строку db.disconnect для отключения от базы данных перед закрытием SSH-соединения, и это, похоже, исправило ситуацию.

Мой вопрос: не закрываются ли соединения с базой данных автоматически? Почему была куча спящих SQL-соединений?


person jessepinho    schedule 18.07.2013    source источник


Ответы (1)


Трудно точно сказать, что происходит, поскольку вы не предоставили ссылку на скрипт, который используете. Судя по предоставленной ограниченной информации, вы, вероятно, создаете новые объекты Sequel::Database каждые пять минут. Объект Sequel::Database предназначен для обеспечения постоянных подключений к базе данных и обычно создается во время запуска приложения и сохраняется в константе.

В общем, вы должны создать один объект Sequel::Database и просто отправлять простой запрос каждые 5 минут. В качестве альтернативы вы должны предоставить блок методу, который создает ваш объект Sequel::Database, чтобы он автоматически закрывался, когда блок возвращается.

person Jeremy Evans    schedule 18.07.2013