Redshift 插入瓶颈
Posted
技术标签:
【中文标题】Redshift 插入瓶颈【英文标题】:Redshift insert bottleneck 【发布时间】:2015-11-25 14:38:27 【问题描述】:我正在尝试将一个巨大的表从 postgres 迁移到 Redshift。
表格大小约为5,697,213,832
工具:pentaho Kettle 表输入(来自 postgres)-> 表输出(Redshift)
与 Redshift JDBC4 连接
通过观察,我发现插入 Redshift 是瓶颈。只有大约 500 行/秒。
有没有什么方法可以加快单机模式下插入 Redshift 的速度?喜欢使用JDBC参数吗?
【问题讨论】:
【参考方案1】:您是否考虑过使用 S3 作为中间层?
将您的数据转储到 csv 文件并应用 gzip 压缩。将文件上传到 S3,然后使用copy
命令加载数据。
http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html
【讨论】:
好主意,只是想知道是否有其他方法可以将数据加载到 Redshift。像多线程插入到 Redshift 中 我认为这是最快的方式。在我的情况下,转换和加载 5M 记录 = 每秒 20.000 行需要 这是根据 redshift 文档加载表格的最有效方式:docs.aws.amazon.com/redshift/latest/dg/t_Loading_data.html redshift 是一种列式数据库技术,它不是为 OLTP 样式的单行插入而设计的。我已经使用这个产品超过 4 年了,相信我,当我说使用 COPY 批量加载是加载大量数据的最快和正确的方法时。 Gzipping 也有助于降低 S3 成本【参考方案2】:我认为 Redshift 性能瓶颈的主要原因是 Redshift 将集群的每一次命中都视为一个查询。它在其集群上执行每个查询,然后进入下一个阶段。现在,当我跨多行发送(在本例中为 10 行)时,每行数据都被视为一个单独的查询。 Redshift 会一个一个地执行每个查询,并在执行完所有查询后完成数据的加载。这意味着如果您有 1 亿行,那么您的 Redshift 集群上将运行 1 亿个查询。好吧,性能转储了!!!
在 PDI 中使用 S3 File Output 步骤会将您的数据加载到 S3 存储桶,然后在 redshift 集群上应用 COPY 命令以将相同的数据从 S3 读取到 Redshift。这将解决您的性能问题。
您也可以阅读以下博客链接:
-
Loading data to AWS S3 using PDI
Reading Data from S3 to Redshift
希望这会有所帮助:)
【讨论】:
作为附录,如果您可以在 S3 上将输出拆分为单独的文件,那么您可以使用清单工具来并行化您的负载。 docs.aws.amazon.com/redshift/latest/dg/…【参考方案3】:最好将数据导出到 S3,然后使用 COPY 命令将数据导入 Redshift。这样,导入过程很快,而您无需对其进行真空处理。
【讨论】:
【参考方案4】:将您的数据导出到 S3 存储桶并在 Redshift 中使用 COPY 命令。 COPY 命令是在 Redshift 中插入数据的最快方法。
【讨论】:
以上是关于Redshift 插入瓶颈的主要内容,如果未能解决你的问题,请参考以下文章