Databricks执行Vacuum后未释放存储空间问题排查求助
以下是几种常见的原因及说明:
异步清理机制导致延迟
Databricks的Vacuum操作分为两个阶段:首先在Delta日志中标记待删除的文件(这一步会生成"Vacuum start"记录并计算预估删除量),实际的物理文件删除是后台异步执行的任务。对于接近1TB的大体积数据,后台清理可能需要数小时才能完成,此时容器指标不会立刻更新。快照保留期限制
默认情况下,Delta Lake的Vacuum会保留7天的快照(对应RETAIN 168 HOURS)。如果"sizeOfDataToDelete"中的文件仍在保留期内,Vacuum不会实际删除这些文件。若要强制删除(需注意风险,可能破坏时间旅行或流作业),需显式指定更短的保留时间,比如:VACUUM table_name RETAIN 0 HOURS;云存储指标延迟
云厂商(AWS S3、Azure ADLS、GCS)的存储空间统计并非实时同步,大文件删除后,指标可能需要1-24小时才能更新为实际剩余空间,具体取决于云服务的刷新机制。活跃事务或未过期快照占用
如果表存在活跃的查询、流处理作业,或者有未过期的时间旅行快照在引用待删除的文件,Vacuum会跳过这些文件的删除。此时虽然预估删除量包含了这些文件,但实际不会执行物理删除,需等待事务完成或快照过期后再重新执行Vacuum。云存储权限不足
即使Vacuum操作在Databricks中显示"成功",如果执行操作的服务账号没有云存储的Delete权限,物理文件无法被删除,仅会在Delta日志中标记为待删除状态。需要检查账号的云存储权限配置。容器内其他数据占用
容器中可能存在非Delta表的文件(如临时文件、日志、独立的非Delta数据集),这些文件占用的空间抵消了Vacuum释放的空间,导致整体存储指标无变化。可以检查容器内的文件结构,确认是否有其他占用空间的数据源。
内容的提问来源于stack exchange,提问作者user2703679

