查询在Redshift中终止

时间:2016-07-01 09:31:52

标签: sql postgresql amazon-redshift

我们正在将数据库从SQL Server 2012迁移到Amazon Redshift。

我们的应用程序的前端是在MicroStrategy(MSTR)中开发的,它会在Redshift上触发查询。

虽然应用程序在生产中运行良好(在SQL Server 2012上),但我们在Redshift的PoC环境中遇到了一个奇怪的问题。

当我们在MSTR中启动仪表板时,仪表板中的查询会点击Redshift,并且成功完成,没有任何问题。

但是当我们通过同时运行所有仪表板来强调测试应用程序时,那个特定的仪表板的查询终止于Redshift。数据库不会抛出任何错误消息,这就是为什么我们无法解决查询终止的原因。

任何人都可以建议我们应该如何解决这个问题。

谢谢

1 个答案:

答案 0 :(得分:2)

问题可能是您使用WLM configuration发送查询的队列有一些超时。

Redshift的设计与其他数据库不同,可针对分析查询进行优化。因此,它不会像使用OLTP DB那样缓存查询结果。另一个区别是您有一个预定义的并发级别(也是WLM的一部分 - http://docs.aws.amazon.com/redshift/latest/mgmt/workload-mgmt-config.html)。每个并发槽都有其分配的资源来快速完成大型查询,但它限制了可以运行的并发查询的数量。默认配置为5,您可以将其增加到50.建议将其增加到不超过15-20,与50一样,这意味着每个查询只获得群集资源的2%而不是20%(5)或5%(20)。

这两个差异的组合是:如果您要连接许多仪表板,每个仪表板都会将其查询发送到Redshift,竞争资源(不会缓存每个查询将一次又一次地运行),并且可能会超时或只是太慢用于交互式仪表板。

请确保您正在使用针对MicroStrategy的Redshift优化驱动程序,这些驱动程序在上述假设下向Redshift发送查询。

您还可以考虑在仪表板和Redshift之间放置一些RDS,其中包含仪表板所需的聚合数据,并且可以在该摘要数据上使用内存缓存和更高的并发性。您可以看到可以使用pg-bouncer see here实现的有趣模式,它可以帮助您向Redshift发送一些查询(分析的查询),并将一些查询(聚合的仪表板)发送到PostgreSQL查询。