Подтвердить что ты не робот

Как остановить запущенный запрос mysql

Как остановить программный запрос на выполнение mysql?

Проблема, с которой я сталкиваюсь, заключается в том, что запрос создается с использованием данных, предоставленных пользователем, и иногда может потребоваться очень много времени для выполнения (большие таблицы - 15-30 миллионов строк). Я хочу предложить пользователю вариант отмены, но не знаю, как остановить выполняющийся в настоящее время mysql-запрос.

Приложение представляет собой Java-апплет-сервлет: пользователь указывает критерии в апплете, который передается сервлету, где для обработки запроса создается класс-обработчик. Этот класс-обработчик является самодостаточным re connect-query - отключается от mysql.

Учитывая этот сценарий, как мне отменить выполняемый mysql-запрос?

4b9b3361

Ответ 2

Требуется отдельное соединение JDBC, что означает, что вам придется создать новый экземпляр обработчика базы данных. Выполните SHOW PROCESSLIST, а затем проведите через результаты и выполните KILL для каждого идентификатора потока, найденного для данного пользователя.

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

Ответ 3

Вы можете выдавать специфические команды MySQL через стандартные библиотеки, предоставляемые MySQL, и запускать KILL QUERY. Возможно, это лучший список процессов и выяснение, какой поток вам нужно убить первым.

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