阅读Amazon Redshift documentatoin我在某个400GB的桌面上运行了一个VACUUM,之前从未进行过清理,以提高查询性能。 不幸的是,VACUUM导致该表增长到1.7TB(!!)并使Redshift的磁盘使用率达到100%。 然后,我尝试通过在超级用户队列中运行CANCEL查询来停止VACUUM(通过运行“set query_group ='superuser';”输入它)但是虽然查询没有引发错误,但这对于不断运行的真空查询。
我该怎么办?
答案 0 :(得分:9)
显然,目前你无能为力。 我打电话给亚马逊支持了一个小时,他们没有工具来阻止真空操作。 他们以静默方式打开了关于CANCEL查询的故障单,而不是在VACUUM查询上工作。
他们建议我拍摄群集的快照(如果你以前拍过快照,通常需要几分钟),然后重新启动群集。 它有点工作,意味着真空停止,一些磁盘空间被清除(600GB),但表仍然是原始大小的两倍多。因为再次吸尘会造成风险太大,我会使用它创建一个深层副本,它应该创建一个真空的表副本。 (你可以在这里阅读有关深层复制的内容 - http://docs.aws.amazon.com/redshift/latest/dg/performing-a-deep-copy.html)。
答案 1 :(得分:4)
我已多次停止真空操作。也许那个时候没有这个功能。
运行以下查询,该查询为您提供真空查询的进程ID。
select * from stv_recents where status='Running';
一旦有了进程ID,就可以运行以下查询来终止进程。
select pg_terminate_backend( pid );
答案 2 :(得分:4)
提示:运行此查询:(取自here)以查看应该吸尘的表格。
注意:这只会在您想知道哪些表很大,以及vacuum
每个表可以获得什么的情况下有所帮助。
select trim(pgdb.datname) as Database,
trim(a.name) as Table, ((b.mbytes/part.total::decimal)*100)::decimal(5,2) as pct_of_total, b.mbytes, b.unsorted_mbytes
from stv_tbl_perm a
join pg_database as pgdb on pgdb.oid = a.db_id
join (select tbl, sum(decode(unsorted, 1, 1, 0)) as unsorted_mbytes, count(*) as mbytes
from stv_blocklist group by tbl) b on a.id=b.tbl
join ( select sum(capacity) as total
from stv_partitions where part_begin=0 ) as part on 1=1
where a.slice=0
order by 3 desc, db_id, name;
然后使用高unsorted_mbytes
:VACUUM your_table;
答案 3 :(得分:1)