【问题标题】:Slow insert and update commands during mysql to redshift replicationmysql 到 redshift 复制期间的缓慢插入和更新命令
【发布时间】:2018-04-30 04:58:19
【问题描述】:

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

在初始复制之后,为了在读取 binlog 时进行持续同步,插入和更新必须按顺序运行,这非常慢。

有什么可以提高性能的吗?

我能想到的一种可能的解决方案是将语句包装在一个事务中,然后一次发送该事务,以避免多次网络调用。但这并不能解决 redshift 中单个 update 和 insert 语句运行速度很慢的问题。单个更新语句需要 6 秒。了解 redshift 的限制(它是一个列式数据库,单行插入会很慢)如何解决这些限制?


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

【问题讨论】:

  • 您自己编写过代码吗?您需要将您的 binlog 流式传输到 s3,然后编写类似 mini-batch script 的内容。或者直接使用 aws DMS 为您完成所有这些工作!!!!
  • 您不得为此使用插入/更新/删除语句 - 在任何情况下都会太慢!
  • 之前我只使用aws dms,但它的性能并不令人满意。每次出现错误时,我都必须删除并重新加载表。我还想为此添加一些异常通知器
  • 在 DMS 上的性能?问题是什么 - 它使用 binlog 进行持续复制。如果您相应地更新您的问题,我可以为 dms 提供帮助。告诉我你的错误。
  • 编辑了关于 dms 性能问题的问题

标签: amazon-redshift binlog


【解决方案1】:

要让 DMS 正常工作,您需要执行以下操作

1) 使用“迁移和持续复制”和“在目标上删除表”创建并运行 dms 任务

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

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

  • 将所有日期和时间戳更改为 varchar(因为使用的选项 由 dms for redshift copy 无法处理 '00:00:00 00:00' 日期 你进入mysql)
  • 将所有 bool 更改为 varchar - 由于 dms 中的错误。

4) on dms - 在“目标表准备模式”中修改任务为“Truncate”

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

现在 - 初始副本和正在进行的二进制日志复制应该可以工作了。

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

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

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

如果您的来源是极光,还要确保您已将 binlog_checksum 设置为“none”(错误文档)

【讨论】:

  • 我已经完成了您上面提到的所有步骤,但是对于日期字段我无法将其更改为 varchar,因为我需要对日期进行查询和分组
  • 我所做的是将 DMS 写入暂存区域,然后我运行一些 etl 以复制到“数据仓库”区域。我使用类似这种情况的方法将日期从 varchar 复制到 datetime='0000-00-00 00:00:00' then null else datetime::timestamp end as datetime,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 2022-10-02
相关资源
最近更新 更多