【问题标题】:How to measure table space on disk in RedShift / ParAccel如何在 RedShift / ParAccel 中测量磁盘上的表空间
【发布时间】:2013-10-30 20:35:52
【问题描述】:

我在 RedShift 中有一张桌子。 如何查看它使用了多少磁盘空间?

【问题讨论】:

  • 嗨,diemacht,请检查我的答案,如果您的块大小配置不是默认配置,则接受的答案会出错。也许这在不知不觉中影响了你。

标签: amazon-web-services amazon-redshift paraccel


【解决方案1】:

使用此演示文稿中的查询:http://www.slideshare.net/AmazonWebServices/amazon-redshift-best-practices

分析集群的磁盘空间使用情况:

select
    trim(pgdb.datname) as Database,
    trim(pgn.nspname) as Schema,
    trim(a.name) as Table,
    b.mbytes,
    a.rows
from (
    select db_id, id, name, sum(rows) as rows
    from stv_tbl_perm a
    group by db_id, id, name
) as a
join pg_class as pgc on pgc.oid = a.id
join pg_namespace as pgn on pgn.oid = pgc.relnamespace
join pg_database as pgdb on pgdb.oid = a.db_id
join (
    select tbl, count(*) as mbytes
    from stv_blocklist
    group by tbl
) b on a.id = b.tbl
order by mbytes desc, a.db_id, a.name; 

分析节点间的Table分布:

select slice, col, num_values, minvalue, maxvalue
from svv_diskusage
where name = '__INSERT__TABLE__NAME__HERE__' and col = 0
order by slice, col;

【讨论】:

  • 嘿,查看我的评论,您的查询可能存在错误。
【解决方案2】:

我知道这个问题已经过时并且已经接受了答案,但我必须指出答案是错误的。 查询在那里输出的“mb”实际上是“块数”。只有当块大小为 1MB(这是默认值)时,答案才是正确的。

如果块大小不同(在我的例子中是 256K),您必须将块数乘以它的大小(以字节为单位)。我建议对您的查询进行以下更改,其中我将块数乘以以字节为单位的块大小(262144 字节),然后除以 (1024*1024) 以输出以兆字节为单位的总数:

select
    trim(pgdb.datname) as Database,
    trim(pgn.nspname) as Schema,
    trim(a.name) as Table,
    b.mbytes as previous_wrong_value,
    (b.mbytes * 262144)::bigint/(1024*1024) as "Total MBytes", 
    a.rows
from (
    select db_id, id, name, sum(rows) as rows
    from stv_tbl_perm a
    group by db_id, id, name
) as a
join pg_class as pgc on pgc.oid = a.id
join pg_namespace as pgn on pgn.oid = pgc.relnamespace
join pg_database as pgdb on pgdb.oid = a.db_id
join (
    select tbl, count(blocknum) as mbytes
    from stv_blocklist
    group by tbl
) b on a.id = b.tbl
order by mbytes desc, a.db_id, a.name; 

【讨论】:

  • 是否可以在 redshift 中更改块大小?我一直在搜索这方面的信息,但没有找到任何方法。
  • 我相信你可以。在以前的 Paraccel(实际的 Actian Matrix - redshift 的前身)上,您可以通过更改 padb.conf 中的 block_size 的值来控制它。在红移上应该是同一行
【解决方案3】:

为上述查询添加所有者和模式过滤器:

select
 cast(use.usename as varchar(50)) as owner, 
 trim(pgdb.datname) as Database,
 trim(pgn.nspname) as Schema,
 trim(a.name) as Table,
 b.mbytes,
 a.rows
from 
 (select 
   db_id,
   id, 
   name,
   sum(rows) as rows
  from stv_tbl_perm a
  group by db_id, id, name
 ) as a
 join pg_class as pgc on pgc.oid = a.id
 left join pg_user use on (pgc.relowner = use.usesysid)
 join pg_namespace as pgn on pgn.oid = pgc.relnamespace 
   -- leave out system schemas
   and pgn.nspowner > 1
 join pg_database as pgdb on pgdb.oid = a.db_id
 join 
  (select 
    tbl,
    count as mbytes
   from stv_blocklist
   group by tbl
 ) b on a.id = b.tbl
order by mbytes desc, a.db_id, a.name;

【讨论】:

  • count 应该是 count(*)
  • 或 count(blocknum)
【解决方案4】:

只是想我会对此进行扩展,因为我面临分布不均的问题。我添加了一些链接和字段,以便按节点和切片分析空间。还添加了第 0 列的最大/最小值和每个切片的值数。

select
 cast(use.usename as varchar(50)) as owner, 
 trim(pgdb.datname) as Database,
 trim(pgn.nspname) as Schema,
 trim(a.name) as Table,
 a.node,
 a.slice,
 b.mbytes,
 a.rows,
 a.num_values,
 a.minvalue,
 a.maxvalue
from 
 (select 
   a.db_id,
   a.id, 
   s.node,
   s.slice,
   a.name,
   d.num_values,
   d.minvalue,
   d.maxvalue,
   sum(rows) as rows
  from stv_tbl_perm a
  inner join stv_slices s on a.slice = s.slice
  inner join (
    select tbl, slice, sum(num_values) as num_values, min(minvalue) as minvalue, max(maxvalue) as maxvalue
    from svv_diskusage
    where col = 0
    group by 1, 2) d on a.id = d.tbl and a.slice = d.slice
  group by 1, 2, 3, 4, 5, 6, 7, 8
 ) as a
 join pg_class as pgc on pgc.oid = a.id
 left join pg_user use on (pgc.relowner = use.usesysid)
 join pg_namespace as pgn on pgn.oid = pgc.relnamespace 
   -- leave out system schemas
   and pgn.nspowner > 1
 join pg_database as pgdb on pgdb.oid = a.db_id
 join 
  (select 
    tbl,
    slice,
    count(*) as mbytes
   from stv_blocklist
   group by tbl, slice
 ) b on a.id = b.tbl
    and a.slice = b.slice
order by mbytes desc, a.db_id, a.name, a.node;

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 2015-04-06
    • 2020-07-31
    • 1970-01-01
    • 2016-05-10
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    相关资源
    最近更新 更多