【发布时间】:2015-11-26 19:56:14
【问题描述】:
我们正在运行一个 5 dc1.large 节点集群,并且在扩展我们的数据加载时遇到了问题。
每个“加载程序”都是一个单独的进程,它: - 将 S3 中的 COPY 命令运行到临时表中 - 然后对活动表执行删除(以删除暂存表中的行) - 最后将暂存数据插入到主表中
以上基本上是doc中推荐的技术:
需要注意的一个重要细节是每个加载器都在单独的一组表上运行(即加载器之间没有锁争用,因为它们在不同的客户数据集上运行)所以加载器将复制到 L1_Staging 表并最终复制到 L1_main表,加载器二将复制到 L2_staging 并最终复制到 L2_main 表等。
我们注意到,当我们并行运行多个加载程序时,作业时间会增加,就好像 redshift 正在序列化所有写入操作一样。同样,没有锁争用。
为什么我们会看到这种模式? redshift 不能很好地处理并行写入吗?
【问题讨论】:
-
写入是否可能正在使用存储的可用带宽?如果查询是 I/O 绑定的,那么其他线程将不会运行得更快。
-
查询肯定是 i/o 绑定的,它是一个大插入,然后是一个删除,然后是另一个插入。 Redshift 是一个黑匣子,所以我真的不知道每个查询消耗了多少 IO 吞吐量。
标签: sql amazon-web-services amazon-redshift