Redshift/Java:SQL 执行挂起并且永不返回

Posted

技术标签:

【中文标题】Redshift/Java:SQL 执行挂起并且永不返回【英文标题】:Redshift/Java: SQL execute hangs and never returns 【发布时间】:2015-12-10 23:32:21 【问题描述】:

我正在处理的应用程序在 AWS Redshift 上运行一系列查询。由于数据量大,一些查询需要更长的时间来执行。

当我检查服务器上的执行详细信息时,查询似乎在 Redshift 上完成。但是,java 应用程序似乎无限期挂起,没有抛出任何异常甚至终止。

这是执行查询的代码。

private void execSQLStrings(String[] queries, String dataset, String dbType) throws Exception 
    Connection conn = null;

    if (dbType.equals("redshift")) 
        conn=getRedshiftConnection();
     else if (dbType.equals("rds"))
        conn=getmysqlConnection();
    

    Statement stmt=conn.createStatement();

    String qry=null;
    debug("Query Length: " + queries.length);
    for (int ii=0;ii<queries.length;++ii) 
        qry=queries[ii];

        if (dataset != null) 
            qry=qry.replaceAll("DATASET",dataset);
        

        debug(qry);
        stmt.execute(qry);
    
    stmt.close();
    conn.close();

我目前无法发布正在运行的查询,但它有多个表连接和按条件分组,并且它是一个 800m 行表。在服务器上完成查询大约需要 7~8 分钟。

【问题讨论】:

【参考方案1】:

您需要更新 DSN 超时和/或 KeepAlive 设置,以确保您的连接保持活动状态。 参考:http://docs.aws.amazon.com/redshift/latest/mgmt/connecting-firewall-guidance.html

【讨论】:

谢谢!这绝对有帮助。

以上是关于Redshift/Java:SQL 执行挂起并且永不返回的主要内容,如果未能解决你的问题,请参考以下文章