pg 定期vacuum和reindex

本文详细介绍了PostgreSQL数据库中vacuum和reindex的作用和使用方法。vacuum用于清理删除数据并释放空间,而reindex用于重建索引以优化性能。文章分别讨论了不同类型的vacuum命令,autovacuum参数配置,以及reindex的用法,包括如何避免锁死和优化索引大小。
摘要由CSDN通过智能技术生成
[size=small]定期vacuum和reindex:
一、说明

postgresql数据库执行delete操作后,表中的记录只是被标示为删除状态,并没有释放空间,在以后的update或insert操作中该部分的空间是不能够被重用的。在postgresql中用于维护数据库磁盘空间的工具是VACUUM,其作用是删除那些已经标示为删除的数据并释放空间。但vacuum工具不能够对相应的索引进行清理,需要手动去重建索引。

因此日常我们需要定期的做一些vacuum和reindex的操作。

二、vacuum

VACUUM语法结构:
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table [ (column [, ...] ) ] ]

1)vacuum 、vacuum full、vacuum analyze、autovacuum 命令的区别
vacuum 只是将删除状态的空间释放掉,转换到能够重新使用的状态,但是它不进行空间合并。
vacuum full 将会使空间释放的信息表现在系统级别,其实质是将当前删除记录后面的数据进行移动,使得整体的记录连贯
起来,降低了“高水位标记”。因此它需要lock table。
vacuum analyze 更新统计信息,使得优化器能够选择更好的方案执行sql。
autovacuum 数据库定时自动进行vacuum


备注:
1、对于有大量update 的表,vacuum full是没有必要的,因为它的空间还会再次增长,所以vacuum就足够了。
2、oracle中同样也有analyze,作用也相同,目前更多的使用的是dbms_stats包。统计信息收集和更新对于系统性能来说非常重要。
oracle在进行imp后自动的对相应数据对象进行统计信息的收集和更新,而postgresql的恢复过程还没有集成到里面,需要手动去执行。
3、适当调大参数maintenance_work_mem,可加快vacuum的执行速度

举例:
tina=# vacuum t_sfa_sample; ---非常快速(10s内)就执行完了
VACUUM
tina=# vacuum full t_sfa_sample; ---约几分钟(表越大,时间越长)
VACUUM
tina=# vacuum analyze t_sfa_sample;
VACUUM

2)autovacuum参数配置
执行直接由autovacuum参数值决定,默认值是on。但当需要冻结xid时,即使此值为off,PG也会进行vacuum:

log_autovacuum_min_duration:默认值为-1,关闭vacu
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值