我使用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条答案
按热度按时间ltqd579y1#
从ec2示例连接到redshift时遇到此问题。调整mtu没有帮助,所以我继续挖掘,发现这个错误与tcp超时有关。
在我用来连接到redshift的示例中执行以下操作修复了问题:
这将把tcp keepalive从7200秒(默认值)更改为60秒。
更多信息请参见:http://docs.aws.amazon.com/redshift/latest/mgmt/connecting-firewall-guidance.html
7uzetpgm2#
这可能不是一个确切的答案,但它的评论太长。
你可能想检查一下
mtu
在执行执行的服务器上设置。红班要给他做手术
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