【问题标题】:Amazon Redshift table block allocationAmazon Redshift 表块分配
【发布时间】:2016-11-21 10:51:06
【问题描述】:

我们的集群是一个 4 节点集群。我们有一个由 72 列组成的表。当我们查询 svv_diskusage 表以检查每个切片中列的分配时,我们观察到每列已分配到 2 个块(0 和 1)中。但是对于少数列,我们的数据类型为 varchar(1),它不应该占用两个空间。

是否有可能如果其中一列占用的块多于一个块(在 varchar(1500) 的情况下),则为表的所有其他列分配相同的块。如果是,这将如何影响集群的整体数据库大小。

【问题讨论】:

    标签: amazon-redshift


    【解决方案1】:

    每个 Amazon Redshift 存储块的大小为 1MB。每个块只包含一个表中一列的数据。

    SVV_DISKUSAGE system view 包含这些块的列表,例如:

    select db_id, trim(name) as tablename, col, tbl, max(blocknum)
    from svv_diskusage
    where name='salesnew'
    group by db_id, name, col, tbl
    order by db_id, name, col, tbl;
    
    db_id  | tablename  | col |  tbl   | max
    --------+------------+-----+--------+-----
    175857 | salesnew   |   0 | 187605 | 154
    175857 | salesnew   |   1 | 187605 | 154
    175857 | salesnew   |   2 | 187605 | 154
    175857 | salesnew   |   3 | 187605 | 154
    175857 | salesnew   |   4 | 187605 | 154
    175857 | salesnew   |   5 | 187605 |  79
    175857 | salesnew   |   6 | 187605 |  79
    175857 | salesnew   |   7 | 187605 | 302
    175857 | salesnew   |   8 | 187605 | 302
    175857 | salesnew   |   9 | 187605 | 302
    175857 | salesnew   |  10 | 187605 |   3
    175857 | salesnew   |  11 | 187605 |   2
    175857 | salesnew   |  12 | 187605 | 296
    (13 rows)
    

    存储每列所需的块数取决于数据量和用于该表的compression encoding

    Amazon Redshift 还会存储每个块中存储的数据的 minvaluemaxvalue。这在SVV_DISKUSAGE 表中可见。这些值通常称为区域地图,用于识别扫描数据时可以跳过的块。例如,如果WHERE 子句在该列中查找值为5 的行,则可以完全跳过具有minvalue6 的块。这在数据压缩时特别有用。

    要调查您的数据消耗两个块的原因,请检查:

    • 每个区块的minvaluemaxvalue
    • 每个块中存储的值 (num_values) 的数量

    这些值会让您了解每个块中存储了多少数据,以及这是否符合您的期望。

    另外,请查看桌面上使用的分发密钥 (DISTKEY)。如果DISTKEY 设置为ALL,则表数据将在多个节点之间复制。这也可以解释你的块数。

    最后,如果数据已从表中删除,那么旧值可能会占用磁盘空间。对表运行VACUUM 命令以删除已删除的数据。

    一个很好的参考是:Why does a table in my Amazon Redshift cluster consume more disk storage space than expected?

    【讨论】:

      猜你喜欢
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 2021-01-02
      相关资源
      最近更新 更多