评估 Redshift 中的 VACUUM 将释放多少空间

Posted

技术标签:

【中文标题】评估 Redshift 中的 VACUUM 将释放多少空间【英文标题】:Evaluate how much space will be freed by VACUUM in Redshift 【发布时间】:2015-12-21 12:10:37 【问题描述】:

根据 AWS 文档:

Amazon Redshift 不会自动回收和重用在您删除行和更新行时释放的空间。

在运行 VACUUM 之前,有没有办法知道或评估 VACUUM 将从磁盘中释放多少空间?

谢谢

参考资料:

http://docs.aws.amazon.com/redshift/latest/dg/t_Reclaiming_storage_space202.html http://docs.aws.amazon.com/redshift/latest/dg/r_VACUUM_command.html

【问题讨论】:

如果您尝试评估对 VACUUM 的需求,请不要忘记 VACUUM 实际上还根据您的 SORT KEYS 对您的数据进行排序。也不建议太接近磁盘存储限制,因为查询创建的临时表需要它。尽量保持在 70% 以下以获得最佳性能。 【参考方案1】:

您可以通过查看svv_table_info 视图中的 tbl_rows 列来计算将从真空命令中释放的存储量。这包括标记为删除的行。将其与同一张表中的 select count(*) 进行比较,您将得到一个比率。在名为 factsales 的理论表上类似这样。

select    (select cast(count(*) as numeric(12,0)) from factsales) /
    cast(tbl_rows as numeric(12,0))
    as "percentage of non deleted rows" 
    from svv_table_info where "table" = 'factsales'

似乎没有一种直接的方式来执行动态 SQL 和游标,因此要在所有表中获得相同的比率,您必须从外部源或编程语言(即 python)执行代码。

【讨论】:

【参考方案2】:

这不是一个非常准确的方法,但是您可以查询 svv_table_info 并查找列 deleted_pct。这将以百分比的形式为您提供一个粗略的概念,即需要使用 Vacuum 重建表的哪一部分。

您可以对系统中的所有表运行它以获得整个系统的估计值。

【讨论】:

没有这样的栏目。最接近的是 pct_used 但它只是告诉您在整个表的容量中使用了多少空间,而没有说明准备删除的空间。无论如何,这张桌子很有趣,赞成:-) 您从该表中获得了一半的故事,tbl_rows col 包括所有行,包括那些标记为删除的行。我发布了一个包含更多详细信息的答案。

以上是关于评估 Redshift 中的 VACUUM 将释放多少空间的主要内容,如果未能解决你的问题,请参考以下文章

AWS Redshift Vacuum 返回错误:断言

Amazon Redshift VACUUM 不成功

Amazon Redshift VACUUM 按架构还是按数据库运行?

Amazon Redshift - 清理和分析详细信息

以 Sortkey 顺序和 VACUUM 加载数据

Postgresql之VACUUM和VACUUM FULL对比