【问题标题】:Redshift table sizes & flavours ofRedshift 表的大小和风格
【发布时间】:2022-01-20 00:04:58
【问题描述】:

对 Redshift 中的“表格大小”一词感到困惑。

我们有: svv_table_info.size "以 1MB 块为单位的表大小"

svv_table_info.pct_used “已用可用空间的百分比”

...所以我认为由于排序键等原因,很多“大小”都是空白空间

然后我们有这个.. https://aws.amazon.com/premiumsupport/knowledge-center/redshift-cluster-storage-space/

.. 使用术语“最小”表大小。 但是我在任何地方都找不到它们在现实世界中的含义的解释?如果配置最佳,这是理论上的最小值吗?

最终我需要找出原始有形数据的基本大小,而不需要任何开销。

那么是的,将它存储在 Redshift 中实际需要多少磁盘空间。

因此,如果我从我们的本地数据库中取出 1TB 并将其推入 Redshift,我希望看到类似 1TB(数据)和 1.2TB(数据 + Redshift 开销)的数据。

希望有人能帮忙澄清一下????

【问题讨论】:

  • 您的链接页面将最小表格大小定义为Minimum table size = block_size (1 MB) * (number_of_user_columns + 3 system columns) * number_of_populated_slices * number_of_table_segments。这是一个非常明确的定义。
  • 那么这么说吧,为什么svv_table_info的size和链接的计算不一样呢?一个是理论上的,一个是实际的?

标签: amazon-web-services amazon-redshift


【解决方案1】:

Redshift 将数据存储在 1MB 块中,并且块与切片和列相关联。因此,如果我的集群中有 2 个切片和一个包含 4 列(加上 3 个系统列以构成 7)的表,分布为 EVEN,至少包含 2 行,那么我的表将最少占用 2 X 7 X 1MB 的空间(14MB磁盘上)。这就是那篇文章的全部内容。

现在,如果我在此表中再插入 2 行,Redshift 将为该数据创建新块。所以现在我的 4 行数据占用了 28MB 的空间。但是,如果我对表进行清理,则浪费的空间将被回收,并且表大小将恢复到 14MB。 (是的,这有点过于简单了,但试图让概念得到理解)

根据经验,一个 1MB 的块通常可以容纳 100,000 到 2,000,000 行的压缩数据。 (是的,这取决于数据不是怪物 varchars)所以对于我们上面的表,我可以继续添加行(和清理)而不增加磁盘上的表大小,直到我在表中获得几十万行(每片)。 Redshift 在存储大块数据时非常有效,但在存储小块数据时效率非常低。

Redshift 对数据大小的了解是它在磁盘上占用了多少块(跨所有节点、切片和列)。如果数据以不同的方式存储(不是在块中,压缩或未压缩),您的数据会有多大,这不是被跟踪的数据。正如 John 所指出的,对于大型表,Redshift 存储数据的效率高于大多数其他数据库(使用压缩时)。

【讨论】:

  • 比尔,就是这样,这帮了很多忙。因此,在您的示例中,您有 2 个初始行,然后又添加了 2 个。那个阶段的 svv_table_info 会告诉我 28MB,而“最小大小”计算会说 14MB?抽真空后,svv_table_info 会降到 14MB?
  • 正确。 Redshift 块是不可变的,一旦写入就永远不会改变(复制、修改和替换)(再次过于简单化)。这就是为什么不经常(5 分钟对 100 毫秒)大块写入 Redshift 如此重要的原因。现在请记住,系统上可能存在同一个块的多个版本,因为多个会话正在修改同一个块。
【解决方案2】:

您无法将现有数据库大小转换为 Redshift 中表的大小。这是因为:

  • 列单独存储
  • 最小块大小为 1MB
  • Redshift 中的数据经过压缩,因此根据数据类型和选择的压缩类型,它可以占用更少的空间

考虑到压缩,Redshift 中的数据可能小于原始(未压缩)数据源。但是,除非您过去传输过类似的数据并应用类似的比率,否则您无法真正提前计算。

【讨论】:

  • 当然,我明白了,也许我的例子很糟糕。假设我有 0.5MB 的数据,Redshift 将其存储在 1MB 的块中。因此,我希望将 0.5MB 报告为“数据大小”,将 1MB 报告为“磁盘大小”。查看 svv_table_info 我假设它会告诉我我的大小是 1MB,而 pct_used 0.5 ?如果这是正确的,那么“最小”计算在哪里发挥作用?
猜你喜欢
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
相关资源
最近更新 更多