Amazon Redshift 大小增加

Posted

技术标签:

【中文标题】Amazon Redshift 大小增加【英文标题】:Amazon Redshift size increase 【发布时间】:2021-12-31 09:00:26 【问题描述】:

我已经将数据从一个表插入到另一个表中,插入数据后,表的大小随着实际大小增加了 30mb,stats_off 也增加到了 100。谁能给我一个原因表的大小增加了,如何减少表的stats_off?

【问题讨论】:

你是如何复制表格的?根据您用于复制表格的方法,有多种方式可能会发生这种情况。原始桌子的尺寸是多少? 30mb 的增长是规模的两倍还是 10% 的增长?使用 ANALYZE 命令可以轻松修复 stats_off 百分比。或者如果您没有禁用 auto_analyze,只需等待系统执行操作即可。 @Bill Weiner 首先谢谢你首先我使用 DDL 命令创建了一个表(创建表 table_name.......命令)然后我使用插入命令插入数据(插入 table_name .....command) 原始表的大小是 836 mb 复制的(新表)的大小是 868 mb。
【参考方案1】:

因此,当您将内容从一个表复制到另一个表时,该表会增长 5%。我假设表之间的压缩(编码)是相同的,因为这会增加表的大小。您说您使用“insert commandS”(复数)插入数据,这会影响大小。 Redshift 中的存储单位是 1MB“块”——这是可以保存的最小单位。块也是一致性的单位。如果我保存 1 行数据,每列的大小将为 1MB。每列的末尾总是有一些空白。

现在,如果您插入一半数据,提交,然后再插入另一半,则第一次插入将出现部分块,第二次插入将出现部分块。这将导致磁盘上的表大小有所增加。这些部分块将用于每一列和每一片。你可以很容易地看到这个效果增加了 32MB。

要回收因这些间隙而丢失的空间,您需要在表上运行 VACUUM。这将对表中的数据进行排序和压缩。

以上假设表的 DDL 没有更改。更改 DDL 将通过多种方式影响表大小。压缩模式就是一个明显的例子,但即使是分布键和样式也会影响表的大小。这一切都归结为如何将数据分配到块中并存储在磁盘上。

如前所述,ANALYZE 将为表创建统计信息。

【讨论】:

我只使用了一个插入语句插入,但我确实使用了多个插入语句将数据插入其中。我可以知道它的确切原因或在哪里可以找到它? AWS 发布了“做什么”,但没有发布很多关于“为什么”的内容。您可以在此处docs.aws.amazon.com/redshift/latest/dg/… 看到他们关于使用 COPY 添加到表的建议,但他们没有说明多个 COPY 如何创建对 VACUUM 的需求。 re:Invent 会谈涵盖了这一点,但找到合适的会谈可能需要一些时间。一些人试图为其他人汇编他们的知识 - s3-eu-west-1.amazonaws.com/cdn.jefclaes.be/…(参见第 4.1 节),但由于难以跟上变化,这些内容变得陈旧。 我与 Redshift 团队合作处理了许多客户项目,并参加了他们的非公开培训。那里有很多很好的信息,但很难找到。好消息是,一旦您了解了 Redshift 的基本内部结构,最佳实践就会从这些知识中消失。我会为想要更多了解这个出色系统如何运作的客户提供 Redshift 培训课程。 所以发生这种情况的原因是因为 Redshift 上的基本存储单元是 1MB 块。这些块中包含特定的数据片段,显然很多数据可以存储在 1MB 中。当您更改块中的一条数据时,您正在创建该块的新版本。如果您要添加数据,则会创建新块来存储这些新信息(修改现有块以使用空白空间太昂贵)。所以很多 INSERT 会创建很多部分填充的块。单个 INSERT 创建的部分填充块更少。 永远不会“改变”(块是不可变的)的原因是因为 MVCC(一致性控制)。 Redshift 是一个多用户数据库,每个表的多个版本需要在每个时间点对每个用户都可用且一致。如果我开始更改表,则“旧”版本必须仍然可供其他人使用,直到我提交我的更改,即使这样,如果其他用户在我提交之前开始使用该表,他们也会看到旧版本。 (表数据在工作过程中不会改变。)多个 INSERT 意味着需要支持多个表版本。

以上是关于Amazon Redshift 大小增加的主要内容,如果未能解决你的问题,请参考以下文章

Redshift - 提取约束

AWS:通过使用 amazon-data-pipeline 将数据从 S3 传输到 Redshift 来实现除 COPY 之外的其他功能

使用java程序在redshift中创建视图的查询大小应该是多少

Amazon Redshift 块大小 1 MB

限制 Amazon Redshift 中架构的大小

如何解决 Amazon Redshift 中的数字溢出问题