【问题标题】:Redshift - Killing the application that initiated the Redshift query does not kill itRedshift - 终止启动 Redshift 查询的应用程序并不会终止它
【发布时间】:2015-10-26 12:36:01
【问题描述】:

我有一个执行 Redshift COPY 命令的 java 应用程序。该应用程序不是作为服务编写的,因此我强制终止该进程以停止它。 Java 应用程序立即被杀死,但是即使在 Java 应用程序被杀死时 Redshift COPY 命令仍在进行中,它仍会继续在 Redshift 上运行并成功完成。

这不是我所期望的行为。我期待一旦终止与 Redshift 的连接,COPY 命令将随之终止,并且 COPY 命令将回滚。

我需要一些设置吗?

【问题讨论】:

    标签: java amazon-redshift


    【解决方案1】:

    在分布式系统中,客户端-服务器应用程序被认为是分布式系统,您通常不依赖节点之间的持续通信。如果您在一侧终止 JDBC 客户端,服务器不会自动取消您的 SQL 查询,因为它不知道您是否终止了查询生成器,或者您只是有一些网络中断。如果每次出现短暂的网络故障时,您都必须再次运行 COPY 命令,这将非常烦人,在某些情况下这可能需要几分钟/几小时。

    取消查询的“正确”方式是CANCEL您的查询。

    【讨论】:

    • CANCEL 查询是否只能手动使用?或者有没有办法让它与应用程序的终止信号挂钩?似乎 CANCEL 需要查询的进程 ID,只能通过 stv_recents 表获得?
    • 您还可以从 Web 控制台找到 pid(以及取消选项)。这是一个简单的 SQL 命令,您必须通过某个连接发送。这就是为什么我发现很难附加到终止信号的原因。
    • 谢谢。我希望将它与 kill 信号挂钩,但我想我唯一的选择是等到 COPY 命令完成后再让我的应用程序关闭。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    相关资源
    最近更新 更多