【问题标题】:Alternative to stopping SQL queries on Redshift when AJAX request is aborted中止 AJAX 请求时停止 Redshift 上的 SQL 查询的替代方法
【发布时间】:2018-05-07 04:16:24
【问题描述】:

我们有很多过滤器(车辆年份、型号、品牌、司机姓名等)。每个选定的过滤器将生成 5-10 个 SQL 查询,这些查询在 5-15 秒的时间范围内执行。假设我们的用户非常快速地标记过滤器:选择了一些司机,下一个车辆,一些数据范围等。在 15 秒内,用户可以发送几十个 AJAX 请求,到达服务器并运行 SQL 查询,数据库阻塞,得到越来越多的查询,每次执行需要更长的时间。

我们考虑了在 AJAX 请求中止时停止查询的解决方案,但这不是一个简单的解决方案。有没有比 AJAX 请求中止时停止查询更好、更简单的解决方案?

我们将 Redshift 用于分析数据,将 PostgreSQL 用于用户数据等。 我们有高级缓存,用于缓存结果。红移有 16 dc2.large 实例的节点,我们还设置了 15 个并发查询 关于 WLM 配置(查询不排队)。我们为所有人提供编码 表、排序键和分布键。我们有几十张桌子,但只有一张 拥有大约 3 亿条记录和约 70 条记录的所有交易 列。 在 Redshift 性能选项卡上的 AWS 控制台中,我们可以看到领导节点在重负载期间的工作率为 99-100%,其他节点约为 10-30%。

【问题讨论】:

  • 您需要优化您的 redshift 集群和查询它的方法。我认为这个问题超出了 stackoverflow 的范围,因为它需要详细分析,并且可能需要与有能力且经验丰富的红移专家一起工作一周。当您说“每个选定的过滤器将生成 5-10 个 SQL 查询,这些查询在 5-15 秒的时间范围内执行”时,这表明您可能完全以错误的方式接近红移。如果您想详细说明这些查询、它们的外观、表中有多少数据等,我们或许可以提供帮助。
  • 谢谢。我刚刚编辑了帖子并添加了更多信息。
  • opax,你能举例说明一下需要这么长时间的查询吗?以及需要多长时间?

标签: java ajax amazon-redshift database-performance


【解决方案1】:

首先,redshift 不适用于事务性数据库,它是一种分析性数据库。其次,如果有大量查询,您应该考虑对查询进行分组或缓存结果。另外,请考虑使用work load management

回到最初的问题,您必须找出由超时的 AJAX 调用启动的查询。您将不得不依赖svv_transactionsstv_recents,这些表将返回您正在运行的进程和查询。接下来,您必须PG_CANCEL_BACKEND 取消查询,或者在最坏的情况下使用PG_TERMINATE_BACKEND 来终止正在运行的进程。虽然如果你碰巧自动化它没有简单的方法来自动化它,但请分享你的经验?。

【讨论】:

  • 这不是答案,应该是评论
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 2011-01-13
  • 1970-01-01
  • 2012-04-27
相关资源
最近更新 更多