在mysql期间缓慢插入和更新命令以进行redshift复制

时间:2017-11-16 15:22:05

标签: amazon-redshift binlog

我正在尝试将复制服务器从MySQL转换为redshift,为此,我正在解析MySQL binlog。对于初始复制,我正在进行mysql表的转储,将其转换为CSV文件并将其上传到S3,然后使用redshift copy命令。为此,性能是有效的。

在初始复制之后,对于我在读取binlog时的连续同步,必须按顺序运行插入和更新,这非常慢。

是否可以采取任何措施来提高绩效?

我能想到的一个可能的解决方案是将语句包装在事务中,然后立即发送事务,以避免多个网络调用。但这并不能解决redshift中单个更新和插入语句运行速度非常慢的问题。单个更新语句需要6秒。知道redshift的局限性(它是一个柱状数据库和单行插入会很慢)可以做些什么来解决这些限制?

编辑1: 关于DMS:我想使用redshift作为仓储解决方案,它只是连续复制我们的MYSQL,我不想对数据进行非规范化,因为我在mysql中有170多个表。在进行复制期间,DMS在一天内多次显示许多错误,并在一两天后完全失败,并且很难解密DMS错误日志。此外,当我删除并重新加载表时,它会删除redshift上的现有表并创建新表,然后开始插入导致我的情况下停机的数据。我想要的是创建一个新表,然后用新表切换旧表并删除旧表

1 个答案:

答案 0 :(得分:0)

以下是让DMS工作的必要条件

1)使用"迁移和正在进行的复制创建并运行dms任务"和#34;删除目标"

上的表格

2)这可能会失败,不用担心。 "停止" dms任务。

3)在redshift上对表进行以下更改

  • 将所有日期和时间戳更改为varchar(因为使用的选项 通过dms进行红移副本无法应对00:00:00:00 00:00'约会 你进入mysql)
  • 将所有bool更改为varchar - 由于dms中的错误。

4)关于dms - 将任务修改为"截断"在"目标表准备模式"

5)重新启动dms任务 - 完全重新加载

现在 - 初始副本和正在进行的binlog复制应该可以正常工作。

确保您使用的是最新的复制实例软件版本

确保您已完全按照此处的说明进行操作

http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html

如果您的来源是极光,请确保您已将binlog_checksum设置为" none" (不好的文件)