我使用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)
和this not:
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
中设置了连接。此外,上面列出的所有事情我都使用这个库
compile 'com.amazonaws:aws-java-sdk-redshift:1.9.39'
任何想法?
这可能不是一个确切的答案,但是对于注释来说太长了。
您可能需要检查执行执行的服务器上的mtu
设置。
Redshift想在1500
字节帧上操作,所有EC2实例默认设置为jumbo帧(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
我从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