我有许多表,其中所有行都已删除。然后我在这些表上运行了一个真空,但它们仍然显示为消耗磁盘空间。知道为什么会这样。谢谢。
答案 0 :(得分:1)
如果要删除Redshift表中的所有行,请执行truncate
操作而不是delete
操作。
此外,如果您不打算保留该表,或者您知道您再也不会填充它们,只需删除它们即可。请记住,丢弃一张桌子会夺走所有特权并获得批准。
提出你的问题,这也发生在我身上。我希望您查询系统表以获得表格大小的近似值。花一些时间让Redshift稳定下来然后运行查询再次检查磁盘空间。该表占用的空间应为0(或者表格不会出现在结果集中,表示占用的所有空间都已释放。
此外,与vacuum
一起,请运行analyze
:Vacuum 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;
检查不同表所占用的空间。