【问题标题】:Redshift vacuum is not reclaiming space红移真空没有回收空间
【发布时间】:2021-03-29 18:19:59
【问题描述】:

我有一个 Redshift 集群,它由 2 个节点和 160 Gb 磁盘组成。 运行真空或任何其他查询时,我随机收到“磁盘已满”错误。我的磁盘使用率为 92%。我确实删除了大小为 10515 Mb 的表中一半以上的旧行,但即使在重新启动集群后也没有任何效果,并且表的大小仍然相同,尽管 count 显示了新的行数。我应该看到磁盘使用量至少有小幅下降,但什么也没有。

有人知道它可能是什么吗?在这种情况下删除表是唯一的选择吗?

【问题讨论】:

    标签: amazon-redshift vacuum


    【解决方案1】:

    这里有几种可能性,但首先让我检查一下事实。您有一个 2 节点 dc2.large 集群,它的磁盘已满 92%。这太满了,需要降低才能降低以提供查询执行的临时空间。您有一个大小为 10515 个块的表。为了解决磁盘空间问题,您删除了相关表中 1/2 的行,然后对该表进行了清理。完成后,您没有看到集群空间和表大小有任何变化,表大小也没有一个块差异。我说的对吗?

    第一种可能是真空未正确完成。您提到即使在吸尘时也会收到磁盘已满消息。那么可能是您尝试的真空没有完成吗?您会看到真空需要临时空间来对表数据进行排序,如果您的集群太满,那么真空可能会失败。在这种情况下,您可以运行不会尝试对表进行排序的仅删除真空,只需回收磁盘空间。这在磁盘已满的情况下成功的可能性更高。

    另一种可能性是行的删除未正确完成或在真空运行之前未提交。这将导致真空在整个行集上运行。

    有问题的表格也可能非常宽(很多列)。这很重要,因为 Redshift 存储数据的方式 - 每个块大小为 1MB,每列需要一个块来存储其数据。这个集群有 4 个切片,如果这个表是 1,500 列宽(是的,那是愚蠢的宽),该表将占用 6,000 个块来存储前 4 行。然后在这些块开始填满之前,不需要额外的磁盘空间来添加行。表大小将以非常大的块移动,并且在删除行时,大小可能不会改变,除非是大块。如果您看到的区块数量完全相同,但如果您看到的区块变化少于您的预期,则不太可能发生这种情况。

    可能会发生其他一些误解。仅排序的真空不会释放空间。节点类型不是我想的那样。该表可以存在于 S3 中并可以通过频谱访问。但根据描述,这些似乎不太可能。

    不请自来的建议:通过释放磁盘空间,您走在了正确的轨道上,但您需要采取更多措施而不是减少这一表。 (我希望您意识到这一点,这只是一个开始。)在大多数情况下,您应该在低于 70% 的磁盘满的情况下运行 - 这因工作负载和表大小而异,但这是一个很好的一般规则。这意味着减少磁盘上的大量数据或增加节点数量(和成本)。将一些数据迁移到 S3 并使用 Spectrum 进行访问可能是一种选择。如果您需要更多存储而不需要更多计算,您可以查看存储优化节点,但由于您处于 Redshift 的最小端,因此这对您来说可能不是一个胜利。您需要 1) 删除不需要的数据,2) 将一些数据移动到 S3 并使用 Spectrum,或者 3) 在集群中添加一个节点。

    【讨论】:

    • 谢谢 Bill Weiner 你得到了正确的一切。发布消息后,我去清理其他桌子,然后结果是可见的,也是我所期望的。原来 10515 块的表实际上与我清理过的其他表一起减少了。其他一些大表仍然显示数千个未排序的兆字节,因此需要进行更多清理。 + 选项 2 和 3 是我接下来要做的事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2013-09-13
    • 2012-06-20
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多