vacuum、vacuum full的使用方法及注意事项

环境

系统平台: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 则更彻底地回收表占用的空间,适用于处理碎片化严重的表。二者对于优化数据库性能和管理磁盘空间非常重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值