Ответ 1
SHOW PROCESSLIST;
KILL <thread_to_be_killed>;
Дополнительную информацию см. в документации
Как остановить программный запрос на выполнение mysql?
Проблема, с которой я сталкиваюсь, заключается в том, что запрос создается с использованием данных, предоставленных пользователем, и иногда может потребоваться очень много времени для выполнения (большие таблицы - 15-30 миллионов строк). Я хочу предложить пользователю вариант отмены, но не знаю, как остановить выполняющийся в настоящее время mysql-запрос.
Приложение представляет собой Java-апплет-сервлет: пользователь указывает критерии в апплете, который передается сервлету, где для обработки запроса создается класс-обработчик. Этот класс-обработчик является самодостаточным re connect-query - отключается от mysql.
Учитывая этот сценарий, как мне отменить выполняемый mysql-запрос?
SHOW PROCESSLIST;
KILL <thread_to_be_killed>;
Дополнительную информацию см. в документации
Требуется отдельное соединение JDBC, что означает, что вам придется создать новый экземпляр обработчика базы данных. Выполните SHOW PROCESSLIST, а затем проведите через результаты и выполните KILL для каждого идентификатора потока, найденного для данного пользователя.
Единственный надежный способ, который я могу сделать для этого, - это каждый пользователь должен войти в базу данных под другим именем пользователя, затем получить весь идентификатор потока для этого пользователя и убить все свои потоки.
Вы можете выдавать специфические команды MySQL через стандартные библиотеки, предоставляемые MySQL, и запускать KILL QUERY. Возможно, это лучший список процессов и выяснение, какой поток вам нужно убить первым.
В зависимости от вашего приложения это может создать проблему безопасности (так как вам нужно предоставить больше привилегий пользователю подключаемого приложения).