环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:4.5.8
文档用途
"vacuum"和"vacuum full"是瀚高数据库中的两个用于对表进行清理和优化的命令,用来提高查询性能和减少存储空间。本文章用于介绍如何使用 "vacuum"和"vacuumfull"对表进行清理和优化。
详细信息
一、VACUUM
简单的收回已删除行占用的磁盘空间,并更新表的统计信息。vacuum收回由死亡元组占用的存储空间,在通常的数据库操作中,被删除或者被更新废弃的元组并没有在物理上从它们的表中移除,它们将一直存在直到一次vacuum被执行
以下是vacuum命令的基本语法:
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ table_name ]
参数说明:
FULL:详细说明见“二 VACUUM FULL”。
FREEZE:在清除之前,先冻结所有锁定表的事务,以确保所有未完成的事务都已提交或回滚。
VERBOSE:显示详细的输出信息。
ANALYZE:更新表的统计信息,以便查询优化器能够使用最新的数据进行查询优化。
table_name:指定要清理的表名。
注意事项:
1、在高并发环境下,执行vacuum命令时可能会对性能产生影响。
2、如果对一个非常大的表进行清理操作,可能需要较长的时间来完成。
以下是一个使用vacuum的例子:
1、订单表(orders)中有若干条数据,更新部分数据后,查询膨胀表(如下图),可看到order表有700万死亡元组,执行vacuum后,再次查询膨胀表后已无order。
二、VACUUM FULL
可以收回更多空间,并且需要更长时间和表上的排他锁。这种方法还需要额外的磁盘空间,因为它会创建该表的一个新拷贝,并且在操作完成之前都不会释放旧的拷贝,通常这种方法只用于需要从表中收回数量庞大的空间时。
VACUUM FULL [ FREEZE ] [ VERBOSE ] [ table_name ]
参数说明:
FREEZE:在清除之前,先冻结所有锁定表的事务,以确保所有未完成的事务都已提交或回滚。
VERBOSE:显示详细的输出信息。
table_name:指定要清理的表名。
注意事项:
1、执行vacuum full命令时,需要足够的磁盘空间来保存重建表的数据。
2、vacuum full开始执行时,系统会先对目标创建一个AccessExclusiveLock ,不允许外界再进行访问(为后面拷贝做准备),然后创建一个表结构和目标表相同的新表,此时vacuum full操作会锁表从而阻塞对表的操作。
3、在高并发环境下,执行vacuum full命令时可能会对性能产生影响。
4、如果对一个非常大的表进行清理操作,可能需要很长时间来完成。
以下例子展示执行vacuum full操作时阻塞对表执行select操作。
1、执行vacuum full时会锁表,无法对表进行操作。
三、总结:
vacuum 和 vacuum full 是瀚高数据库中用于维护和优化数据库的工具。vacuum 用于回收被删除或更新行的空间,并更新表的统计信息,而 vacuum full 则更彻底地回收表占用的空间,适用于处理碎片化严重的表。二者对于优化数据库性能和管理磁盘空间非常重要。