`
lykops
  • 浏览: 86088 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

postgres--vacuum

 
阅读更多

vacuum的功能

回收空间

数据库总是不断地在执行删除,更新等操作。良好的空间管理非常重要,能够对性能带来大幅提高。

postgresql中执行delete操作后,表中的记录只是被标示为删除状态,并没有释放空间,在以后的update或insert操作中该部分的空间是不能够被重用的。

在postgresql中用于维护数据库磁盘空间的工具是VACUUM,其重要的作用是删除那些已经标示为删除的数据并释放空间。经过vacuum清理后,空间才能得到释放。

VACUUM回收已删除元组占据的存储空间。在一般的PostgreSQL操作里,那些已经DELETE的元组或者被UPDATE过后过时的元组是没有从它们所属的表中物理删除的;在完成VACUUM之前它们仍然存在。因此我们有必须周期地运行VACUUM,特别是在常更新的表上。

冻结tuple的xid

PG会在每条记录(tuple)的header中,存放xmin,xmax信息(增删改事务ID)。transactionID的最大值为2的32次,即无符整形来表示。当transactionID超过此最大值后,会循环使用。

这会带来一个问题:就是最新事务的transactionID会小于老事务的transactionID。如果这种情况发生后,PG就没有办法按transactionID来区分事务的先后,也没有办法实现MVCC了。

因此PG用vacuum后台进程,按一定的周期和算法触发vacuum动作,将过老的tuple的header中的事务ID进行冻结。冻结事务ID,即将事务ID设置为“2”(“0”表示无效事务ID;“1”表示bootstrap,即初始化;“3”表示最小的事务ID)。PG认为被冻结的事务ID比任何事务都要老。这样就不会出现上面的这种情况了。

更新统计信息

vacuum analyze时,会更新统计信息,让PG的planner能够算出更准确的执行计划。autovacuumanalyzethreshold和autovacuum_analyzescalefactor参数可以控制analyze的触发的频率。

更新visibility map

在PG中,有一个visibility map用来标记那些page中是没有dead tuple的。这有两个好处,一是当vacuum进行scan时,直接可以跳过这些page。二是进行index-only scan时,可以先检查下visibility map。这样减少fetch tuple时的可见性判断,从而减少IO操作,提高性能。另外visibility map相对整个relation,还是小很多,可以cache到内存中。

执行语法

sql语句

VACUUM语法结构

VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table [ (column [, ...] ) ] ]

系统命令

vacuumdb --help

Full Vacuum

full vacuum与单纯的vacuum的区别

vacuum只是将删除状态的空间释放掉,转换到能够重新使用的状态,但是对于系统来说该数据块的空闲空间并没有反应到系统的元数据中,并不进行空间合并。
vacuum full除了vacuum,还进行空间合并,会锁表和索引,而且是“AccessExclusiveLock”级别的,其实vacuum full会重建整个表。
vacuum full将会使空间释放的信息表现在系统级别,其实质是将当前删除记录后面的数据进行移动,使得整体的记录连贯起来。

vacuum full的执行流程

建临时表

PG会新建一个临时表,临时表继承老表所有属性。
这个阶段会对pg_class申请“RowExclusiveLock”锁,因为需要插入条目。

拷贝数据

将原来的数据copy到temp表中。
对临时表,老表以及索引都以“AccessExclusiveLock”模式打开。
另外对于toast,只是lock,不打开。
在这个过程中完成Dead Tuple的清理。

表交换

新表将老表替换掉。会对pg_class再次申请“RowExclusiveLock”锁。

重建索引

是在交换之后完成的,重建索引时,会更新一些统计信息。对表申请“ShareLock”锁。

删除临时表

索引重建完成后,将带有老物理文件的新临时表进行删除。 

注意

执行过程中锁表,大部分时间无法访问,对业务影响很大
执行过程消耗时间长,消耗大量IO、内存、CPU等
对于大表和业务繁忙时间最后不要执行
一般合理设置vacuum参数,进行常规vacuum也就够了。

Vacuum analyze

analyze的功能是更新统计信息,使得优化器能够选择更好的方案执行sql。
统计信息收集和更新对于系统性能来说非常重要,与oracle维护类似,通常可以通过采用手动或者定制任务的方式。也有不同,oracle在进行imp后自动的对相应数据对象进行统计信息的收集和更新,而postgresql的恢复过程还没有集成到里面,需要手动去执行。

autovacuum

autovacuum定时自动进行vacuum。

对于有大量update的表,vacuum full是没有必要的,因为它的空间还会再次增长,所以vacuum就足够了。

参数

autovacuum:默认为on,表示是否开起autovacuum。
    默认开起。特别的,当需要冻结xid时,尽管此值为off,PG也会进行vacuum。

autovacuum_naptime:检查执行vacuum的间隔,默认1min。 
    该值会被vacuum launcher分配到每个DB上。autovacuum_naptime/num of db。

log_autovacuum_min_duration:当vacuum动作执行超时,记录日志。
    -1关闭vacuum的日志记录,0表示所有log。正整数表示超时时间。

autovacuum_max_workers:最大同时运行的worker数,不包含launcher本身。
    默认值为3。配置主要依据系统当前负载和资源。
    对于系统负载较重的情况,建议开启少量的进程为好,反之,空闲时间可以采用较大值的方式。

分享到:
评论

相关推荐

    postgres数据库维护方法和恢复.docx

    这里 `-a` 表示清理所有数据库,`-z` 表示执行 `VACUUM FULL` (完全清理并回收所有空间),`-U postgres` 指定使用 `postgres` 用户执行。 二、PostgreSQL 数据库恢复 1. 数据备份:定期备份数据库是恢复策略的...

    postgres数据库用户手册

    通过`pg_statistic`、`pg_stat_activity`等视图监控数据库状态,使用`VACUUM`和`ANALYZE`命令维护数据统计信息和清理无用数据。 十、开发集成 Postgres与其他编程语言(如Python、Java、C#、PHP等)有良好的集成,...

    postgres 命令

    除了以上几个命令,PostgreSQL 还提供了一些其他命令,如 `createdb` 创建新的数据库,`dropdb` 删除数据库,`pg_ctl` 管理数据库服务器的启动、停止和监控,以及 `vacuum` 用于优化数据库性能。 在使用这些命令时...

    藏经阁-PostgresChina2018_石勇虎_庖丁解牛之平安vacuum优化之路.pdf

    Postgres中国技术大会-平安vacuum优化之路 在PostgreSQL数据库中,vacuum是一种非常重要的机制,它可以回收垃圾数据、更新统计信息和visibility map,防止数据库膨胀和性能下降。但是,在实际应用中,vacuum机制也...

    postgres9.6 rpm包.zip

    5. VACUUM FULL改进,减少了磁盘空间的占用并提高了清理效率。 在实际应用中,PostgreSQL 9.6可以用于各种场景,包括Web应用程序、数据分析、物联网(IoT)、GIS地理信息系统等。其丰富的功能集,如窗口函数、递归...

    postgreSQL安装,附带安装文档说明

    - 使用VACUUM和ANALYZE优化数据库性能。 总之,PostgreSQL的安装并不复杂,但理解其工作原理和最佳实践是至关重要的。遵循这些步骤,你将能够成功安装并开始使用这个强大的数据库管理系统。在实际操作过程中,参考...

    postgresql-9.5.0-1-windows 32位

    8. **性能优化**:包括改进的VACUUM操作,减少了磁盘空间占用,并提高了查询速度。 安装“postgresql-9.5.0-1-windows.exe”文件,用户将获得完整的PostgreSQL服务器、客户端工具和必要的库文件。安装过程中,用户...

    第五节 vacuumdb.docx

    - 清理并分析`postgres`数据库中的`testtable`表:`/ vacuumdb -e --analyze --table testtable postgres`,这会执行VACUUM和ANALYZE,获取`testtable`的统计信息。 - 清理并分析`postgres`数据库中`testtable`表...

    Postgresql-10安装包

    4. **自动 Vacuum 优化**:自动 Vacuum 过程进行了改进,能更好地处理大量删除和更新操作,减少存储空间的浪费。 5. **逻辑复制**:新引入的逻辑复制功能允许数据通过订阅和发布机制在不同数据库之间进行实时同步,...

    postgresql参数解析

    - `autovacuum_naptime`和`autovacuum_vacuum_threshold`等:设置自动VACUUM的触发条件。 在调整这些参数时,应考虑硬件资源、系统负载、应用需求以及数据库的特定工作模式。对于大型生产环境,通常需要仔细监控和...

    postgresql-9.1.4-1-linux

    4. **监控与维护**: 定期执行 VACUUM 和 ANALYZE,保持数据库健康。 ### 安全性与备份策略 1. **权限管理**: 为不同用户设置合适的权限,避免不必要的访问。 2. **加密**: 使用 SSL 连接保护数据传输,启用 ...

    greenplum维护操作

    - 清理垃圾数据: Postgres中的删除操作实际上是添加标记,而非立即物理删除。执行`VACUUM`时才会彻底清除标记的数据。 - **重要性**: 对于频繁更新的表,定期执行`VACUUM`可以显著提高查询效率。 #### 七、数据...

    postgresql-9.5.13-1-linux-x64-binaries.tar.gz

    1. **bin**:这个目录包含了PostgreSQL服务器及其相关工具的可执行文件,如`postgres`(主服务器进程)、`pg_ctl`(控制服务器启动、停止和状态检查)和`psql`(命令行交互式客户端)。 2. **doc**:包含了...

    藏经阁-PostgresChina2018_余鹏_gogudb—基于FDW实现的PG分库分表插件.pdf

    - 扩展了对远程服务器的操作,如创建索引、删除索引、重新索引、修改表、重命名表、截断和VACUUM等。 5. **postgres_fdw**: postgres_fdw是PostgreSQL的一个内置FDW,它支持SELECT、INSERT、UPDATE和DELETE操作...

    PostgreSQL-11.1-1 Windows64位

    PostgreSQL,简称Postgres,是一种功能强大的开源对象关系数据库系统。它以其高度稳定、安全和可扩展性而备受赞誉,广泛应用于各种规模的企业和项目中。标题中的"PostgreSQL-11.1-1 Windows64位"指的是PostgreSQL的...

    postgresql-11.4.tar.gz

    5. 设置权限:为保证PostgreSQL服务能够启动和访问数据目录,执行"chown -R postgres:postgres /usr/local/pgsql/data",并将该目录设置为适当的权限,如"chmod 700 /usr/local/pgsql/data"。 6. 启动和设置开机启动...

    PostgreSQL性能调优

    在并发操作较多的情况下,可能需要额外调整`vacuum_cost_delay`参数以避免过高的I/O消耗。 #### 四、总结 通过对硬件配置与数据库参数的优化调整,可以显著提升PostgreSQL的性能表现。在实际应用场景中,还需要...

    PostgresSQL优化

    1. 维护计划:定期运行VACUUM FULL和REINDEX来整理表和重建索引。 2. 分区表:对于大数据量的表,可以使用分区表来提高查询和维护效率。 3. 编码选择:根据数据特性选择合适的字符编码,以节省存储空间和提升查询...

Global site tag (gtag.js) - Google Analytics