PostgreSQL 自动Vacuum配置方式

 更新时间:2021年01月26日 16:45:23   作者:零零喵  
这篇文章主要介绍了PostgreSQL 自动Vacuum配置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

PostgreSQL的Vacuum由于以下原因需要定期执行。

释放,再利用因更新或者删除更新而占用的磁盘空间。

更新PostgreSQL 查询计划用的统计数据。

避免事务ID的重置而引起非常老的数据丢失。

VACUUM 的标准SQL文的执行和其他的对数据库的实际操作可以并行处理。

SELECT 、INSERT 、UPDATE 、DELETE 等命令和同通常一样继续能够执行。

但是,VACUUM处理中的时候, ALTER TABLE ADD COLUMN等等的命令不能够对表进行重新定义。

还有,由于执行VACUUM 的时候,有大量的I/O操作,其他的操作可能性能比较低,比如查询的反应非常慢。为了较少对性能的影响,可以通过参数来调整。

autovacuum (boolean ):

数据库服务器是否设置为自动vacuum。默认为 自动vacuum。 但是如果要让vacuum能够正常运转,必须使 track_counts 有效。 track_counts这个参数在 postgresql.conf配置文件内,或者通过命令来设置。

即使设置不是自动vacuum。系统发现有防止事务ID的重置的必要的时候也会自动启动

log_autovacuum_min_duration (integer ):

设置执行时间超过多长 的vacuum才输出log。时间单位毫秒。

如果这个参数设置为0的话,所有vacuum相关 的log都输出。

如果这个参数设置为-1的话,这个也是默认设置。log的输出无效,也就是所有vacuum相关 的log都不输出。

这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。

autovacuum_max_workers (integer ):

设置能够同时执行的vacuum最大进程数。 默认是3个。

这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。

autovacuum_naptime (integer ):

设置数据库执行vacuum的最小延迟。时间单位是分。默认是1分钟。这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。

autovacuum_vacuum_threshold (integer ):

设置任何一张表内触发VACUUM 的 更新,删除tuple的最小数。默认为50。

这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过 pg_autovacuum的项目可以覆盖每张表。

autovacuum_analyze_threshold (integer ):

设置任何一张表内触发ANALYZE 的更新,删除tuple的最小数。默认为50。

这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过 pg_autovacuum的项目可以覆盖每张表。

autovacuum_vacuum_scale_factor (floating point ):

是否触发VACUUM的判断的时候 、设置 autovacuum_vacuum_threshold 追加的表容量断片。默认是0.2(即20%)。

这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过 pg_autovacuum的项目可以覆盖每张表。

autovacuum_analyze_scale_factor (floating point ):

是否触发 ANALYZE 的判断的时候 、设置 autovacuum_vacuum_threshold 追加的表容量断片。默认是0.1(即10%)。

这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过 pg_autovacuum的项目可以覆盖每张表。

autovacuum_freeze_max_age (integer ):

为了防止事务ID的重置,VACUUM强制操作前,设置表的 pg_class .relfrozenxid字段的最大值。默认是2亿。

这个参数只能够在启动的时候设置。

autovacuum_vacuum_cost_delay (integer ):

设置自动vacuum操作中cost延迟。默认是20毫秒。设置的为-1的话,使用vacuum_cost_delay的值。

这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过 pg_autovacuum的项目可以覆盖每张表。

autovacuum_vacuum_cost_limit (integer ):

设置自动vacuum操作中cost的最大界限值。默认是-1,这时候用vacuum_cost_limit的值。 这个参数的设置可以修改postgresql.conf配置文件,也可以通过命令来设置。这个设定通过 pg_autovacuum的项目可以覆盖每张表。

补充:PostgreSQL数据库管理:定期vacuum

为什么PostgreSQL数据库管理工作中,定期vacuum是一个重要的工作.

原因在于以下3点:

释放,再利用 更新/删除的行所占据的磁盘空间.

更新PostgreSQL查询计划中使用的统计数据.

防止因事务ID的重置而使非常老的数据丢失.

第一点的原因是

PostgreSQL数据的插入,更新,删除操作并不是真正放到数据库空间.如果不定期释放空间的话,由于数据太多,查询速度会巨降.

第二点的原因是

PostgreSQL在做查询处理的时候,为了是查询速度提高,会根据统计数据来确定执行计划.如果不及时更新的话,查询的效果可能不如预期.

第三点的原因是

PostgreSQL中每一个事务都会产生一个事务ID,但这个数字是有上限的. 当事务ID达到最大值后,会重新从最小值开始循环.这样如果不及时把以前的数据释放掉的话,原来的老数据会因为事务ID的丢失而丢失掉.

话说回来vacuum操作可以手动和自动.如果有专门的数据库维护人员的话,可以适时进行.但很多系统为了节省维护成本,这样就需要依赖自动vacuum了.

虽说定期vacuum是PostgreSQL的一个弱点,不过在8.3版本以后,把这个任务交给自动vacuum就可以了.

要使自动vacuum有效,必须设置track_counts参数为true.具体的设置可以参照官方的文档.

定期vacuum还是自己写一个shell来自动执行比较好.

在shell中执行vacuumdb命令. 例: ./vacuumdb -d databaseName --analyze

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Postgresql 实现查询一个表/所有表的所有列名

    Postgresql 实现查询一个表/所有表的所有列名

    这篇文章主要介绍了Postgresql 实现查询一个表/所有表的所有列名,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostGreSql 判断字符串中是否有中文的案例

    PostGreSql 判断字符串中是否有中文的案例

    这篇文章主要介绍了PostGreSql 判断字符串中是否有中文的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringBoot3集成PostgreSQL的详细过程

    SpringBoot3集成PostgreSQL的详细过程

    PostgreSQL是一个功能强大的开源数据库系统,具有可靠性、稳定性、数据一致性等特点,且可以运行在所有主流操作系统上,包括Linux、Unix、Windows等,这篇文章主要介绍了SpringBoot3集成PostgreSQL,需要的朋友可以参考下
    2024-03-03
  • PostgreSQL 恢复误删数据的操作

    PostgreSQL 恢复误删数据的操作

    这篇文章主要介绍了PostgreSQL 恢复误删数据的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL中查看当前时间和日期的几种常用方法

    PostgreSQL中查看当前时间和日期的几种常用方法

    在 PostgreSQL 中,有多个函数可以用来查看当前时间和日期,这些函数在处理时间戳、日期和时间的计算时非常有用,以下是几种常用的查看当前时间和日期的函数及示例,需要的朋友可以参考下
    2024-10-10
  • Mysql 8.0.33 如何迁移至 Postgresql 16.2

    Mysql 8.0.33 如何迁移至 Postgresql 16.2

    由于云平台需要改造,将Mysql替换成Postgresql,话说回来,Postgresql和Mysql语法有些差异,如何稳妥的进行迁移,下面给大家分享Mysql 8.0.33 如何迁移至 Postgresql 16.2,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • PostgreSQL有效地处理数据序列化和反序列化的方法

    PostgreSQL有效地处理数据序列化和反序列化的方法

    在 PostgreSQL 中,处理数据的序列化和反序列化是确保数据在存储、传输和处理过程中的一致性和可用性的重要任务,这涉及到选择合适的数据类型、转换函数以及在应用程序与数据库之间进行数据交互的策略,需要的朋友可以参考下
    2024-07-07
  • PostgreSQL因大量并发插入导致的主键冲突的解决方案

    PostgreSQL因大量并发插入导致的主键冲突的解决方案

    在数据库操作中,并发插入是一个常见的场景,然而,当大量并发插入操作同时进行时,可能会遇到主键冲突的问题,本文将深入探讨 PostgreSQL 中解决因大量并发插入导致的主键冲突的方法,并通过具体的示例进行详细说明,需要的朋友可以参考下
    2024-07-07
  • PostgreSQL存储过程循环调用方式

    PostgreSQL存储过程循环调用方式

    这篇文章主要介绍了PostgreSQL存储过程循环调用方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • postgresql无序uuid性能测试及对数据库的影响

    postgresql无序uuid性能测试及对数据库的影响

    小编最近在做一个超大表的性能测试,在过程中发现无序uuid做主键对表插入性能有些影响,纠结该怎么处理这一问题呢?接下来小编给大家分享postgresql无序uuid性能测试的相关知识帮助大家学习,需要的彭参考下吧
    2021-06-06

最新评论