Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

VACUUM

在指定的表或当前数据库中的所有表中回收空间并对行重新排序。

注意

仅表所有者或超级用户可对表高效地执行 vacuum 操作。如果在没有必需的表权限的情况下运行 VACUUM 操作,该操作将成功完成,但不起任何作用。

默认情况下,当任意表中有 95% 的行已有序时,VACUUM 会为该表跳过排序阶段。跳过排序阶段能够显著提高 VACUUM 的性能。此外,在删除阶段,VACUUM 将回收空间以使至少 95% 的剩余行不会被标记为删除。VACUUM 通常能够跳过重写很多仅包含几个标记为删除的行的数据块的过程。因此,与回收 100% 的已删除行相比,VACUUM 的删除阶段所耗的时间通常少得多。要更改某个表的默认排序或删除阈值,请在运行 VACUUM 时包含表名称和 TO threshold PERCENT 参数。

注意

Amazon Redshift VACUUM 命令语法和行为与 PostgreSQL VACUUM 操作的语法和行为大不相同。例如,Amazon Redshift 中的默认 VACUUM 操作是 VACUUM FULL,该操作可回收磁盘空间并对所有行进行重新排序。相比之下,PostgreSQL 中的默认 VACUUM 操作只能回收空间并使其可供重复使用。

有关更多信息,请参阅 对表执行 vacuum 操作

语法

Copy
VACUUM [ FULL | SORT ONLY | DELETE ONLY | REINDEX ] [ [ table_name ] [ TO threshold PERCENT ] ]

参数

FULL

对指定的表(或当前数据库中的所有表)进行排序,并回收由前面的 UPDATE 和 DELETE 操作标记为删除的行所占用的磁盘空间。完全 vacuum 操作不会为交错的表重建索引。要在执行完全 vacuum 操作后对交错的表重建索引,请使用 VACUUM REINDEX 选项。

如果任意表已至少 95% 有序,则默认情况下 VACUUM FULL 会为其跳过排序阶段。如果 VACUUM 能够跳过排序阶段,它将执行 DELETE ONLY 并在删除阶段回收空间,这样,至少有 95% 的剩余行不会被标记为删除。 

如果未达到排序阈值(例如,如果对 90% 的行进行了排序)且 VACUUM 执行了完全排序,则 VACUUM 也会执行一次彻底删除操作,从而从 100% 的已删除行恢复空间。

您只能为单个表更改默认 vacuum 阈值。要更改某个表的默认 vacuum 阈值,请包含表名称和 TO threshold PERCENT 参数。

SORT ONLY

对指定的表(或当前数据库中的所有表)进行排序,而不回收由删除的表所释放的空间。当回收磁盘空间不重要但对新行进行重新排序很重要时,此选项非常有用。当未排序的区域不包含大量已删除行且不跨整个已排序区域时,SORT ONLY vacuum 将减少 vacuum 操作的运行时间。如果应用程序不具有磁盘空间限制,但依赖于要求表行保持排序状态的查询优化,则可从此类 vacuum 操作获益。

默认情况下,VACUUM SORT ONLY 将跳过任何至少有 95% 的行已排序的表。要更改某个表的默认排序阈值,请在运行 VACUUM 时包含表名称和 TO threshold PERCENT 参数。

DELETE ONLY

回收由前面的 UPDATE 和 DELETE 操作标记为删除的行所占用的磁盘空间,并压缩表以释放占用的空间。DELETE ONLY vacuum 操作不对表数据进行排序。当回收磁盘空间很重要但对新行进行重新排序不重要时,此选项可减少 vacuum 操作的运行时间。此外,当查询性能已处于最佳状态,且不要求对行重新排序来优化查询性能时,此选项也很有用。

默认情况下,VACUUM DELETE ONLY 将回收空间,这样,至少有 95% 的剩余行不会被标记为删除。要更改某个表的默认删除阈值,请在运行 VACUUM 时包含表名称和 TO threshold PERCENT 参数。

REINDEX

分析交错排序键列中的值的分配,然后执行完全 VACUUM 操作。VACUUM REINDEX 所需的时间显著大于 VACUUM FULL 所需的时间,因为它需要执行额外的过程来分析交错排序键。对于交错表,排序和合并操作所花费的时间更长,因为与复合排序相比,交错排序需要重新排列的行可能更多。

如果 VACUUM REINDEX 操作在完成前终止,则下一个 VACUUM 将恢复重建索引操作,然后执行完全 vacuum 操作。

VACUUM REINDEX 不支持 TO threshold PERCENT。

table_name

要执行 vacuum 操作的表的名称。如果不指定表名称,vacuum 操作将应用于当前数据库中的所有表。您可以指定任何永久或临时的用户创建的表。此命令对于其他对象(例如,视图和系统表)没有用处。

如果包含 TO threshold PERCENT 参数,则必须指定表名称。

TO threshold PERCENT

一个子句,指定超过时 VACUUM 将跳过排序阶段的阈值和删除阶段中回收空间的目标阈值。排序阈值 是执行 vacuum 操作之前在指定表中已排序的行占总行数的百分比。删除阈值 是执行 vacuum 操作之后未标记为删除的行占总行数的最小百分比。

由于 VACUUM 仅会在表中已排序行所占的百分比低于排序阈值时对行进行重新排序,Amazon Redshift 经常可以大幅减少 VACUUM 次数。同样,当 VACUUM 不受限于从 100% 的标记为删除的行回收空间时,它通常能够跳过重写仅包含几个已删除行的数据块的过程。

例如,如果您为 threshold 指定 75,则当表中 75% 或以上的行已有序时,VACUUM 会跳过排序阶段。对于删除阶段,VACUUMS 将设置一个回收磁盘空间的目标,这样,在执行 vacuum 操作之后,表中至少有 75% 的行不会被标记为删除。threshold 值必须为介于 0 到 100 之间的整数。默认值为 95。如果您指定了值 100,VACUUM 将始终对表进行排序(除非它已完全排序)并从标记为删除的所有行回收空间。如果您指定的值为 0,则 VACUUM 将从不对表进行排序,也从不会回收空间。

如果您包含 TO threshold PERCENT 参数,则必须同时指定表名称。如果忽略表名称,则 VACUUM 操作将失败。

TO threshold PERCENT 参数不能用于 REINDEX。

使用说明

对于大多数 Amazon Redshift 应用程序,建议执行完全 vacuum 操作。有关更多信息,请参阅 对表执行 vacuum 操作

在运行 vacuum 操作之前,请注意以下行为:

  • 您不能在事务块 (BEGIN ... END) 中运行 VACUUM。

  • 在任何给定时间,您只能在一个群集上运行一个 VACUUM 命令。如果您尝试同时运行多个 vacuum 操作,Amazon Redshift 将返回错误。

  • 对表执行 vacuum 操作时,表可能会出现一定量的增长。当没有可回收空间的已删除行时,或者表的新排序顺序导致数据压缩率降低时,这是预期行为。

  • 在 vacuum 操作期间,会出现一定程度的查询性能降级。一旦 vacuum 操作完成,性能就将恢复正常。

  • 并发写入操作可在 vacuum 操作期间执行,但我们不建议在进行 vacuum 操作时执行写入操作。更高效的方法是,先完成写入操作,然后再运行 vacuum 操作。此外,不能对 vacuum 操作开始后写入的任何数据执行此操作;在这种情况下,有必要进行另一个 vacuum 操作。

  • 如果加载或插入操作已在进行中,则 vacuum 操作可能无法开始。Vacuum 操作临时需要表的独占访问权限才能开始。要求此独占访问权限的时间非常短,vacuum 操作不会阻止任何重要时段内的并发加载和插入操作。

  • 当不需要对特定表执行 vacuum 操作时,将跳过 vacuum 操作;不过,发现可跳过该操作会产生一些开销。如果您知道某个表是原始表或未达到 vacuum 阈值,则不要对其运行 vacuum 操作。

  • 对小型表执行 DELETE ONLY vacuum 操作可能不会减少用于存储数据的块数,特别是当表具有大量列或群集为每个节点使用大量切片时。这些 vacuum 操作会按每个切片、每个列增加一个块,来支持对表执行的并行插入;相比通过回收磁盘空间减少块计数带来的好处,产生的开销可能会得不偿失。例如,如果在执行 vacuum 操作之前,一个 8 节点群集中包含 10 列的表占用了 1000 个块,则 vacuum 将不会减少实际块计数,除非由于已删除的行导致回收 80 个以上的磁盘空间块。(每个数据块使用 1MB。)

示例

根据默认的 95% vacuum 阈值回收所有表中的空间和数据库并对这些表中的行进行重新排序。

Copy
vacuum;

根据默认的 95% 阈值回收 SALES 表中的空间并对该表中的行进行重新排序。

Copy
vacuum sales;

始终回收 SALES 表中的空间并对该表中的行进行重新排序。

Copy
vacuum sales to 100 percent;

仅当 SALES 表中有序行的比例低于 75% 时重新排序其中的行。

Copy
vacuum sort only sales to 75 percent;

回收 SALES 表中的空间,以使至少 75% 的剩余行不会在 vacuum 操作之后被标记为删除。

Copy
vacuum delete only sales to 75 percent;

为 LISTING 表重建索引,然后对该表执行 vacuum 操作。

Copy
vacuum reindex listing;

以下命令会返回错误。

Copy
vacuum reindex listing to 75 percent;

本页内容: