【问题标题】:Long vacuums in redshift红移中的长真空
【发布时间】:2018-01-09 15:27:28
【问题描述】:

我正在尝试为 Redshift 中的一些大表运行 VACUUM REINDEX。当我在 SQLWorkbenchJ 中运行其中一个真空吸尘器时,它永远不会完成并在大约 2 小时后返回由对等方重置的连接。当我使用类似这样的方式运行真空吸尘器时,Python 中实际上会发生同样的事情:

conn_string = "postgresql+pg8000://%s:%s@%s:%d/%s" % (db_user, db_pass, host, port, schema)
conn = sqlalchemy.engine.create_engine(conn_string,
                                       execution_options={'autocommit': True},
                                       encoding='utf-8',
                                       connect_args={"keepalives": 1, "keepalives_idle": 60,
                                                             "keepalives_interval": 60},
                                               isolation_level="AUTOCOMMIT")
conn.execute(query)

有没有一种方法可以使用 Python 或 SQLWorkbenchJ 运行这些查询?我希望它们每个至少持续一个小时。这是预期的行为吗?

【问题讨论】:

  • 检查表没有被锁定(检查锁)。从 linux 服务器或连接更稳定的设备上运行您的真空吸尘器
  • @JonScott 嗨!我实际上是从 linux 服务器运行 python 脚本,我知道表没有被锁定,因为我实际上看到 VACUUM REINDEX 从 AWS 控制台运行。

标签: python database amazon-redshift


【解决方案1】:

简答

根据https://docs.aws.amazon.com/redshift/latest/dg/r_VACUUM_command.html,您可能需要在您的python 脚本中添加一种机制,以便在重新索引失败时重试

如果 VACUUM REINDEX 操作在完成之前终止,则下一个 VACUUM 在执行完全真空操作之前恢复重新索引操作。

但是...

需要注意的几件事(如果您已经知道,我深表歉意)

那么这如何回答这个问题呢?

  • 如果您的表使用复合排序或根本没有排序 VACUUM REINDEX 根本不需要,它没有任何价值
  • 如果您的表使用交错,您需要首先检查是否需要重新索引?示例查询

    SELECT tbl AS table_id,
       (col + 1) AS column_num, -- Column in this view is zero indexed
       interleaved_skew,
       last_reindex
    FROM svv_interleaved_columns
    
  • 如果 skew 的值为 1.0,你肯定不需要 REINDEX

把所有东西放在一起

  • 您可以让您的 python 脚本运行https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_INTERLEAVED_COLUMNS.html 中列出的查询来查找需要重新索引的表(也许您添加一些更适合您的情况的业务逻辑,例如:您自己的排序偏差阈值)
  • REINDEX 应用最差类型的锁定,因此请尽可能在非工作时间定位脚本的运行
  • 挑战交错排序的需求并支持复合

【讨论】:

  • 我知道这已经有一段时间了,但我将其标记为正确,因为它让我重新审视了我的整个自动化维护过程。我最终发现连接重置是因为公司防火墙问题,然而,这个解释让我探索重建一些排序键及其类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 2021-07-04
相关资源
最近更新 更多