我们正在将数据库从SQL Server 2012迁移到Amazon Redshift。
我们的应用程序的前端是在MicroStrategy(MSTR)中开发的,它会在Redshift上触发查询。
虽然应用程序在生产中运行良好(在SQL Server 2012上),但我们在Redshift的PoC环境中遇到了一个奇怪的问题。
当我们在MSTR中启动仪表板时,仪表板中的查询会点击Redshift,并且成功完成,没有任何问题。
但是当我们通过同时运行所有仪表板来强调测试应用程序时,那个特定的仪表板的查询终止于Redshift。数据库不会抛出任何错误消息,这就是为什么我们无法解决查询终止的原因。
任何人都可以建议我们应该如何解决这个问题。
谢谢
答案 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查询。