跳到主要内容

数据清理与回收

Introduced or updated: v1.2.940

概述

删除行或删除表不一定会立即释放存储空间。Databend 会保留历史数据和已删除对象,以便恢复。VACUUM 在数据符合清理条件后回收存储空间。

以下 VACUUM 命令需要企业版许可证。清理后的历史数据和已删除对象无法恢复。

选择清理范围

命令清理范围效果
VACUUM TABLE单个可写 FUSE 表清理符合条件的历史数据,保留表及其当前数据。
VACUUM TABLES指定数据库或当前 Catalog 所有非系统数据库中的可写 FUSE 表批量执行相同的历史数据清理。
VACUUM DROPPED OBJECTS指定数据库或当前 Catalog 所有数据库中的已删除对象,包括已删除的数据库清理符合条件的已删除对象及其存储和元数据。
VACUUM TEMPORARY FILES租户的临时溢出文件和非活动临时表会话清理临时存储。
VACUUM ALL依次清理表历史数据、已删除对象和临时文件按各步骤的保留规则依次执行三项清理。

单表清理需要对该表具有 SUPER 访问权限。指定数据库的批量清理或已删除对象清理需要对该数据库具有 SUPER 访问权限。未指定 FROM 的批量表清理和已删除对象清理、VACUUM ALL 以及临时文件清理需要全局 SUPER 权限。

批量表清理跳过非 FUSE 表和只读表。普通的单表失败会记录到日志中,并继续处理其他表;取消操作以及列出数据库或表时发生的错误可能中止执行。这些命令均不返回结果集。

清理表历史数据

VACUUM TABLE default.my_table;

数据合并会合并较小的 Block 和 Segment。先合并数据,再回收符合条件的历史数据占用的存储空间:

OPTIMIZE TABLE default.my_table COMPACT;
VACUUM TABLE default.my_table;

批量清理:

-- One database
VACUUM TABLES FROM default;

-- All non-system databases in the current catalog
VACUUM TABLES;

清理已删除对象

-- One database
VACUUM DROPPED OBJECTS FROM default;

-- All databases in the current catalog, including dropped databases
VACUUM DROPPED OBJECTS;

命令会清理符合条件的已删除对象及其元数据和存储。清理后无法再通过 UNDROP 恢复。

清理临时文件或执行全部步骤

VACUUM TEMPORARY FILES;

依次执行表历史数据、已删除对象和临时文件清理:

VACUUM ALL;

若某一步骤向上传递错误,后续步骤将不再执行。已完成的清理不会回滚。

保留期与保护规则

表历史数据和已删除对象使用 data_retention_time_in_days 设置(默认为 1 天)。例如,为当前会话设置 2 天的保留期:

SET data_retention_time_in_days = 2;
SHOW SETTINGS LIKE 'data_retention_time_in_days';

活动表清理会保留未过期快照标签引用的快照及数据,包括未设置过期时间的标签。过期标签不再保护历史数据;VACUUM 会尝试删除过期标签,标签删除失败不会中止清理。

临时溢出文件采用独立的保留期,默认为 3 天。可使用 RETAIN 覆盖该值;此选项不设置临时表会话的存活时间:

VACUUM TEMPORARY FILES RETAIN 2 DAYS;
欢迎体验 Databend Cloud

基于 Rust + 对象存储构建的新一代多模态数仓,一个平台即可进行 BI、向量、全文检索及地理空间分析。

支持标准 SQL,自动弹性伸缩,助您快速构建现代化数据平台。

注册即领 ¥200 代金券。

注册体验