Как остановить запущенный запрос MySQL - PullRequest
23 голосов
/ 14 января 2010

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

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

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

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

Ответы [ 3 ]

40 голосов
/ 14 января 2010
SHOW PROCESSLIST;
KILL <thread_to_be_killed>;

Дополнительную информацию см. В документации

Показать список процессов

Kill A Running Thread

2 голосов
/ 14 января 2010

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

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

1 голос
/ 14 января 2010

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

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

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