如何在RedShift/ParAccel中测量磁盘上的表空间

die*_*cht 20 amazon-web-services paraccel amazon-redshift

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

Tom*_*icz 45

使用此演示文稿中的查询: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; 
Run Code Online (Sandbox Code Playgroud)

分析节点之间的表分布:

select slice, col, num_values, minvalue, maxvalue
from svv_diskusage
where name = '__INSERT__TABLE__NAME__HERE__' and col = 0
order by slice, col;
Run Code Online (Sandbox Code Playgroud)


Die*_*ego 9

我知道这个问题很老,已经接受了答案,但我必须指出答案是错误的.查询输出的内容为"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; 
Run Code Online (Sandbox Code Playgroud)