具有0行消耗磁盘空间的Redshift表

时间:2017-04-17 15:23:24

标签: amazon-redshift

我有许多表,其中所有行都已删除。然后我在这些表上运行了一个真空,但它们仍然显示为消耗磁盘空间。知道为什么会这样。谢谢。

1 个答案:

答案 0 :(得分:1)

如果要删除Redshift表中的所有行,请执行truncate操作而不是delete操作。

此外,如果您不打算保留该表,或者您知道您再也不会填充它们,只需删除它们即可。请记住,丢弃一张桌子会夺走所有特权并获得批准。

提出你的问题,这也发生在我身上。我希望您查询系统表以获得表格大小的近似值。花一些时间让Redshift稳定下来然后运行查询再次检查磁盘空间。该表占用的空间应为0(或者表格不会出现在结果集中,表示占用的所有空间都已释放。

此外,与vacuum一起,请运行analyzeVacuum and Analyze - Amazon Redshift Documentation

您可以使用:

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;

检查不同表所占用的空间。