2015-03-10 3 views
2

Я работаю над приложением Rails с Postgres на Ubuntu. К сожалению, для меня это устаревшее приложение использует некоторые хранимые процедуры в тяжелом весе в db. Более того, db довольно большой (5 ГБ), и мой компьютер не особенно быстрый. Время от времени, если я передаю некоторые плохие параметры из моего кода в db, мой компьютер становится очень медленным до такой степени, что я не могу попасть на консоль и убить процесс postgres. Я предполагаю, что это связано с очень дорогостоящим db-запросом. Мое единственное решение - это жесткий сброс моего ноутбука. Поэтому мой вопрос: есть ли способ насильственно убить длинный вопрос? Или, возможно, есть ли способ ограничить процессор и RAM, которым db разрешено использовать, так что у меня все еще есть некоторые ресурсы, оставшиеся для запуска, и вручную перезапускать postgres?Как принудительно остановить длительный запрос postgres при большой нагрузке?

+1

'pg_terminate_backend()': http://www.postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE –

ответ

5

Вы можете установить максимальное время для заявления, чтобы взять с опцией statement_timeout конфигурации:

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

Вы можете установить эту опцию различными способами, например, в postgresql.conf для всех, за один сеанс с помощью команды SET, или даже в базе данных или на роль. Дополнительная информация о параметрах настройки находится в the documentation.

Смежные вопросы