Amazon Redshift:查询执行挂起

Amazon Redshift: query execution hangs

我使用 amazon redshift,有时查询执行挂起,没有任何错误消息,例如 此查询将执行:

select extract(year from date), extract(week from date),count(*) from some_table  where date>'2015-01-01 00:00:00' and date<'2015-12-31 23:59:59' group by extract(year from date), extract(week from date)

这不是:

select extract(year from date), extract(week from date),count(*) from some_table  where date>'2014-01-01 00:00:00' and date<'2014-12-27 23:59:59' group by extract(year from date), extract(week from date)

但只有当我将项目部署到服务器并且在我的本地计算机上执行所有查询都没有任何问题时才会发生这种情况。

我已经在我的代码 autoCommit=true 中设置了连接。 另外上面列出的所有事情我都使用这个库

来处理grails
        compile 'com.amazonaws:aws-java-sdk-redshift:1.9.39'

有什么想法吗?

这可能不是一个准确的答案,但对于评论来说太长了。

您可能需要检查执行执行的服务器上的 mtu 设置。

Redshift 希望对 1500 字节帧进行操作,并且默认情况下所有 EC2 实例都设置为巨型帧 (9000)

为了让您 运行 查询没有问题,您需要具有相同的 mtu 设置。

要检查您当前拥有的内容,运行此命令:

ip addr show eth0

示例输出如下:

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP qlen 1000

在这种情况下,mtu 是 9001,因此您需要通过 运行ning 将其更改为 1500:

/sbin/ifconfig eth0 mtu 1500 up

我在从 EC2 实例连接到 RedShift 时遇到了这个问题。调整 MTU 没有帮助,所以我继续挖掘,发现错误与 TCP 超时有关。

在我用来连接到 RedShift 的实例中执行以下操作解决了问题:

# echo 60 > /proc/sys/net/ipv4/tcp_keepalive_time

这会将 TCP keepalive 从 7200 秒(默认)更改为 60 秒。

可以在以下位置找到更多信息: http://docs.aws.amazon.com/redshift/latest/mgmt/connecting-firewall-guidance.html