24

如何以编程方式停止正在运行的 mysql 查询?

我面临的问题是查询是使用用户提供的数据构建的,并且有时可能需要很长时间才能执行(大型表 15 - 3000 万行)。我想为用户提供一个取消选项,但不知道如何停止当前正在执行的 mysql-query。

该应用程序是一个Java applet-servlet:用户在applet 中指定标准,该标准被传递给servlet,其中创建了一个处理程序类来处理请求。这个处理程序类是自包含的重新连接-查询-断开到mysql。

鉴于这种情况,如何取消正在运行的 mysql-query?

4

3 回答 3

40
SHOW PROCESSLIST;
KILL <thread_to_be_killed>;

有关其他详细信息,请参阅文档

显示进程列表

杀死一个正在运行的线程

于 2010-01-14T16:00:15.823 回答
2

需要一个单独的 JDBC 连接,这意味着您必须创建一个新的数据库处理程序实例。执行SHOW PROCESSLIST语句,然后遍历结果并为给定用户找到的每个线程 id 执行KILL语句。

我能想到的唯一可靠的方法是每个用户都必须以不同的用户名登录到数据库,然后获取该用户的所有线程 ID 并杀死他们的所有线程。

于 2010-01-14T16:14:40.290 回答
1

您可以通过 MySQL 提供的标准库发出 MySQL 特定命令并运行KILL QUERY。可能最好列出进程并确定首先需要杀死哪个线程。

但是,根据您的应用程序,这可能会产生安全问题(因为您需要为连接的应用程序用户提供更多权限)。

于 2010-01-14T16:02:59.500 回答