【问题标题】:Cancel long running queries in HSQLDB / JDBC取消 HSQLDB / JDBC 中长时间运行的查询
【发布时间】:2014-10-12 12:13:55
【问题描述】:
我们有大量长时间运行的 SQL 查询,希望能够取消执行。到目前为止,我使用ExecutorCompletionService 来运行查询,这对于取消尚未运行的查询非常有效。
我的问题是:我也想硬取消当前正在运行的查询。 java.sql.Statement.cancel() 方法似乎不适用于HSQLDB。来自java doc:“如果 DBMS 和驱动程序都支持中止 SQL 语句,则取消此 Statement 对象。”我猜 HSQLDB 不支持取消。
有没有人知道如何取消该语句(以一种可能丑陋但仍然可以接受的方式)?
【问题讨论】:
标签:
sql
jdbc
hsqldb
cancellation
【解决方案1】:
对我来说,有效的 sql 命令是 ALTER SESSION <SESSIONNUMBER> END STATEMENT
【解决方案2】:
请参阅https://sourceforge.net/p/hsqldb/bugs/1436/ 以获得有效的解决方案。
简短的变体:
使用最新的 SVN 版本的 HSQLDB 或服务器的 2.3.4 Final。
如果您要取消的当前查询正在使用 hsqldb 连接,请创建一个到同一服务器的具有管理员权限的新连接。
使用
select * from information_schema.system_sessions
使用您要查找的语句查找会话。
使用
ALTER SESSION <SESSIONNUMBER> RELEASE
取消声明。
关闭连接。