2010-01-14 2 views
23

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

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

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

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

+0

Делайте это осторожно, если вы убиваете запрос, разбивает ваш стол – VKGS

ответ

39
SHOW PROCESSLIST; 
KILL <thread_to_be_killed>; 

Обратитесь к документации для получения дополнительной информации

Show The Process List

Kill A Running Thread

+0

, используя KILL QUERY, немного предпочтительнее KILL для этого случая. Таким образом, запрос убит, но не соединение ref # комментарий в «http://stackoverflow.com/questions/3787651/how-can-i-stop-a-running-mysql -query» –

0

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

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

2

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

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

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