Amazon Redshift:查询执行挂起

时间:2015-06-02 17:32:18

标签: grails hadoop amazon-web-services 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'

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

这可能不是一个确切的答案,但评论时间太长了。

您可能想要检查执行执行的服务器上的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,因此您需要通过运行:

将其更改为1500

/sbin/ifconfig eth0 mtu 1500 up

答案 1 :(得分:3)

从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