由于VACUUM查询,Amazon Redshift磁盘使用率为100%

Max*_*gan 9 vacuum amazon-web-services amazon-redshift

阅读Amazon Redshift documentatoin我在某个400GB的表上运行了一个VACUUM,之前从未进行过清理,以提高查询性能.不幸的是,VACUUM导致该表增长到1.7TB(!!)并使Redshift的磁盘使用率达到100%.然后我尝试通过在超级用户队列中运行CANCEL查询来停止VACUUM(通过运行"set query_group ='superuser';"输入它)但是虽然查询没有引发错误,但这对于继续运行的真空查询

我能做什么?

Max*_*gan 8

显然,目前你无能为力.我在电话上用亚马逊支持了一个小时,他们没有工具来阻止真空操作.他们以静默方式打开了关于CANCEL查询的故障单,而不是在VACUUM查询上工作.

他们建议我拍摄群集的快照(如果你以前拍过快照,通常需要几分钟),然后重新启动群集.它有点工作,意味着真空停止,一些磁盘空间被清除(600GB),但表仍然是原始大小的两倍多.因为再次吸尘会造成风险太大,我会使用它创建一个深层副本,它应该创建一个真空的表副本.(你可以在这里阅读有关深拷贝的内容 - http://docs.aws.amazon.com/redshift/latest/dg/performing-a-deep-copy.html).


Rah*_*pta 7

我已经停止抽真空几次了。也许那个时候该功能不可用。
运行以下查询,为您提供真空查询的进程ID。

select * from stv_recents where status='Running';

拥有进程ID后,您可以运行以下查询以终止该进程。

select pg_terminate_backend( pid );


Ben*_*ier 7

提示:运行此查询:(取自此处)以查看应清理哪些表。

注意: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;
Run Code Online (Sandbox Code Playgroud)

然后真空工作台的高度unsorted_mbytesVACUUM your_table;