MySQLdb выполняет тайм-аут - PullRequest
       16

MySQLdb выполняет тайм-аут

2 голосов
/ 13 октября 2008

Иногда в нашей производственной среде возникает ситуация, когда соединение между службой (которая является программой на python, использующей MySQLdb) и сервером mysql не работает, некоторые пакеты теряются, происходит некоторая черная магия, и .execute () объекта MySQLdb.Cursor никогда не заканчивается (или займет много времени, чтобы закончить).

Это очень плохо, потому что это пустая трата служебных потоков. Иногда это приводит к истощению рабочего пула, и сервис перестает отвечать вообще.

Таким образом, вопрос заключается в следующем: есть ли способ прервать операцию MySQLdb.Connection.execute через заданный промежуток времени?

Ответы [ 2 ]

2 голосов
/ 13 октября 2008

если связь представляет собой такую ​​проблему, рассмотрите возможность написания «прокси», который получает ваши команды SQL через нестабильное соединение и передает их на сервер MySQL по надежному каналу (возможно, работает на том же компьютере, что и сервер MySQL). Таким образом, вы можете полностью контролировать обнаружение и повторную попытку.

1 голос
/ 13 октября 2008

Вы должны точно проанализировать, в чем проблема. Соединения MySQL должны со временем прерваться, если сервер пропал; Протоколы поддержки TCP обычно включены. Возможно, вы сможете настроить тайм-ауты TCP на уровне ОС.

Если база данных «ненадежная», то вам определенно необходимо выяснить, как это сделать. Кажется маловероятным, что база данных действительно является проблемой, более вероятно, что сеть между ними.

Если вы используете (некоторые) брандмауэры с сохранением состояния любого рода, возможно, что они теряют часть состояния, что приводит к потере других хороших долгоживущих соединений.

Возможно, вы захотите рассмотреть возможность изменения параметра времени ожидания в MySQL; в противном случае долгоживущее неиспользуемое соединение может «устареть», когда сервер и клиент считают, что оно все еще живо, но какой-то промежуточный сетевой элемент «забыл» о TCP-соединении. Приложение, пытающееся использовать такое «устаревшее» соединение, будет долго ждать, пока не получит ошибку (но в конечном итоге это должно произойти).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...