gpt4 book ai didi

python - Redshift 中的长真空

转载 作者:搜寻专家 更新时间:2023-10-30 22:28:16 25 4
gpt4 key购买 nike

我正在尝试为 Redshift 中的一些大表运行 VACUUM REINDEX。当我在 SQLWorkbenchJ 中运行其中一个 vacuum 时,它永远不会完成并在大约 2 小时后返回由 peer 重置的连接。当我使用类似这样的东西运行吸尘器时,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 来运行这些查询?我希望他们每次至少持续一个小时。这是预期的行为吗?

最佳答案

简答

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

If a VACUUM REINDEX operation terminates before it completes, the next VACUUM resumes the reindex operation before performing the full vacuum operation.

然而...

有几点需要注意(如果您已经知道,我深表歉意)

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

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

    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
  • 如果偏斜值为 1.0,您肯定不需要 REINDEX

将所有内容整合在一起

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

关于python - Redshift 中的长真空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48171485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com