我的桌子是500gb大,有8亿多行,有4个按键交错排序。 其中一把钥匙有一个很大的偏差680+。在运行VACUUM REINDEX时,每十亿行需要花费很长时间,大约需要5个小时。
当我追踪真空进展时,它会说:
SELECT * FROM svv_vacuum_progress;
table_name | status | time_remaining_estimate
-----------------------------+--------------------------------------------------------------------------------------+-------------------------
my_table_name | Vacuum my_table_name sort (partition: 1761 remaining rows: 7330776383) | 0m 0s
我想知道它会在完成之前多久,因为它也没有给出任何时间估计。它目前处理的分区1761 ...是否可以知道某个表中有多少个分区?请注意,这些似乎是Redshift中的一些存储级低层分区。
答案 0 :(得分:1)
如果您的真空运行缓慢,则可能是集群上没有足够的空间。我建议你在真空时暂时加倍节点数。
您可能还想考虑更改架构的设置方式。值得查看这个红移提示列表,看看你是否可以改变任何东西: https://www.dativa.com/optimizing-amazon-redshift-predictive-data-analytics/
答案 1 :(得分:1)
现在,建议您不使用Interleaved Sorting。
排序算法对VACUUM操作造成巨大负担,Interleaved Sorts的优点仅适用于非常小的用例。
我建议您更改WHERE子句中最常用的字段的复合排序。
最有效的排序是那些涉及总是递增的日期字段的排序。例如,假设将行添加到具有事务日期的表中的情况。所有新行的日期都大于前一行。在这种情况下,实际上不需要VACUUM,因为数据已根据日期字段进行排序。
另外,请注意500 GB实际上是很多数据。做任何重新安排数据量的事情都需要时间。
答案 2 :(得分:0)
我们恢复到上一阶段的方法是删除表并从备份快照的预真空索引时间恢复它。