首页 > 数据库 > > SQL语法-VACUUM
VACUUM回收表或B-Tree索引中已经删除的行所占据的存储空间。在一般的数据库操作里,那些已经DELETE的行并没有从它们所属的表中物理删除;在完成VACUUM之前它们仍然存在。因此有必要周期地运行VACUUM,特别是在经常更新的表上。
VACUUM [ ( { FULL | FREEZE | VERBOSE | {ANALYZE | ANALYSE }} [,...] ) ]
[ table_name [ (column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ];
VACUUM [ FULL [COMPACT] ] [ FREEZE ] [ VERBOSE ] [ table_name ] [ PARTITION ( partition_name ) ];回收空间并更新统计信息,且对关键字顺序有要求。
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] { ANALYZE | ANALYSE } [ VERBOSE ]
[ table_name [ (column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ];
VACUUM DELTAMERGE [ table_name ];针对HDFS表,删除HDFS表在HDFS存储上的空值分区目录。
VACUUM HDFSDIRECTORY [ table_name ];参数说明
选择“FULL”清理,这样可以恢复更多的空间,但是需要耗时更多,并且在表上施加了排他锁。
FULL选项还可以带有COMPACT参数,该参数只针对HDFS表,指定该参数的VACUUM FULL操作性能要好于未指定该参数的VACUUM FULL操作。
COMPACT和PARTITION参数不能同时使用。
说明:使用FULL参数会导致统计信息丢失,如果需要收集统计信息,请在VACUUM FULL语句中加上analyze关键字。
指定FREEZE相当于执行VACUUM时将vacuum_freeze_min_age参数设为0。
为每个表打印一份详细的清理工作报告。
更新用于优化器的统计信息,以决定执行查询的最有效方法。
要清理的表的名称(可以有模式修饰)。
取值范围:要清理的表的名称。缺省时为当前数据库中的所有表。
要分析的具体的字段名称。
取值范围:要分析的具体的字段名称。缺省时为所有字段。
HDFS表不支持PARTITION参数,COMPACT和PARTITION参数不能同时使用。
要清理的表的分区名称。缺省时为所有分区。
只针对HDFS表和列存表,将HDFS表或者列存表的delta table中的数据转移到主表存储上。对HDFS表而言,当delta表中数据量小于六万行,则不作迁移,只有在大于或者等于六万行数据时,将delta表中所有数据迁移到HDFS上,并通过truncate清理delta表的存储空间。对列存表而言,此操作受enable_delta_store和参数说明中的deltarow_threshold控制。
说明:为了检查列存delta表中的信息(HDFS表的delta表数据可以通过explain analyze查到),提供下述DFX函数,用于获取某个列存表的delta表中数据存储情况:
只针对HDFS表,删除HDFS表在HDFS存储上表目录下的空值分区目录。
--在表tpcds.reason上创建索引
CREATE UNIQUE INDEX ds_reason_index1 ON tpcds.reason(r_reason_sk);
--对带索引的表tpcds.reason执行VACUUM操作。
VACUUM (VERBOSE, ANALYZE) tpcds.reason;
--删除索引
DROP INDEX ds_reason_index1 CASCADE;
DROP TABLE tpcds.reason;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3159240/ ,如需转载,请注明出处,否则将追究法律责任。