Redshift维护

时间:2017-04-22 14:52:44

标签: database amazon-redshift database-administration maintenance

我发现自己正在处理一个包含2种不同类型表的Redshift集群:每天完全替换的表和每天都会收到合并的表。

据我所知,到目前为止,应该提供维护命令,因为所有这些表都有数百万行。到目前为止我发现的3个命令是:

vacuum table_name;
vacuum reindex table_name;
analyze table_name;

应该在哪种情况下应用哪些命令?我计划在他们半夜加载后每天做这件事。每天这样做的原因是因为在手动运行其中一些之后,性能会有很大提升。

阅读完文档后,我觉得标准程序应该是什么不太清楚。

谢谢!

编辑:无论负载类型如何,所有表都有交错排序键。

1 个答案:

答案 0 :(得分:2)

来自VACUUM documentation

的命令快速摘要
  • VACUUM:对指定的表(或当前数据库中的所有表)进行排序,并回收由先前的UPDATE和DELETE操作标记为删除的行占用的磁盘空间。完全真空不会对交错表执行重新索引。
  • VACUUM REINDEX:分析交错排序键列中值的分布,然后执行完整的VACUUM操作。
  • ANALYZE:更新表统计信息以供查询计划程序使用。

优良作法是在将大量数据加载到表格中时执行ANALYZE 。事实上,如果不到10%的数据发生变化,Amazon Redshift将自动跳过分析,因此运行ANALYZE几乎没有什么害处。

你提到一些表每天都被完全替换。这应该通过删除和重新创建表,或使用TRUNCATE来完成。使用DELETE *清空表的效率较低,不应用于清空表。

VACUUM可能需要很长时间。如果数据按时间顺序附加且表格SORTKEY基于时间,则无需对表格进行抽真空。这是因为表已经有效地排序了。但是,这不适用于交错排序。

交错排序更棘手。来自sort key documentation

  

交错排序键为排序键中的每一列提供相同的权重,因此查询谓词可以按任何顺序使用构成排序键的列的任何子集。

基本上,交错排序使用精确算法对数据进行排序,以便基于任何列(单独或组合)的查询将最小化需要从磁盘读取的数据块的数量。磁盘访问总是占用数据库中的最多时间,因此最小化磁盘访问是加速数据库的最佳方式。 Amazon Redshift使用区域映射来识别要从磁盘读取的块,并且最小化此类访问的最佳方法是对数据进行排序,然后在执行查询时跳过尽可能多的块

Interleaved排序的性能低于普通排序,但是可以提供多个字段排序相当好的好处。 如果您经常在许多不同的字段上进行查询,则仅使用交错排序。维护交错排序(通过VACUUM REINDEX)的开销非常高,只有在重新索引工作值得的情况下才能完成结果

所以,总结一下:

    重大数据更改后
  • ANALYZE
  • 如果您从表中删除数据,则定期
  • VACUUM
  • VACUUM REINDEX如果您使用Interleaved Sorts并且大量数据已更改