【问题标题】:Faster updates on database?数据库更新更快?
【发布时间】:2013-05-02 11:07:11
【问题描述】:

我们正在尝试将我们的数据库 (mysql) 移动到 amazon redshift(数据仓库),并且在更新仓库数据库时遇到了问题。我们已经在我们的数据库上启用了常规日志记录,然后我们正在从 redshift 的常规日志中重播所有这些查询。所有更新查询大约需要 6-7 秒。我正在寻找某种方式以更快的速度执行这些更新? Amazon redshift 在内部使用 postgre 数据库,如果任何为 redshift/postgre 本身解决了这个问题的人都可以提出解决方案,那就太好了。尽管使更新更快的通用方法也会有所帮助。 我尝试过的一个解决方案是将所有更新合并到一组删除和插入中。因此,单个表上的所有更新都将转换为单个删除查询,其中包含组合 where 子句和单个批量插入查询。 任何人都可以提供替代解决方案或评论我尝试过的解决方案吗?

【问题讨论】:

  • 目前我们的db托管在mysql上,查询是对单个表的基本更新查询。
  • 我正在从 mysql db 上的常规日志中捕获查询,并在 postgre db 上重放它们。
  • 每次更新过程的行数通常在10k行左右。我们正在 Redshift 控制台上启动一个连接(这是一个单一事务),但我尝试在一个事务中运行一个查询并在一个事务中运行大约 100 个查询。结果是相同的,每个查询大约需要 6-7 秒,即单个事务中 100 次更新大约需要 600-700 秒。
  • 至于执行计划,我在 redshift 上创建了一个临时数据库,有 2 列,并尝试了更新查询,“更新 table_name set column1 = 10 where column2 = 20;”这个查询需要 6 秒才能执行。

标签: mysql database amazon-redshift


【解决方案1】:

Redshift 不打算用作“常规”数据库 - 应使用 COPY 命令(或 CREATE TABLE AS 语法)插入所有数据,然后将其用于 SELECTS。

对单行的操作(如插入或更新)不是此数据库的优化目标。

建议的解决方法(使用 DELETE/INSERT)而不是 UPDATE 会提高速度,但请记住,所有添加的行都插入到 UNSORTED 数据库块中,只有在 VACUUM 之后,所有数据才会正确排序并且未使用的空间将被回收使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多