PG数据库AUTOVACUUM的优化小技巧

PostgreSQL VACUUM 之深入浅出 (五) 从一步一步精准触发 AUTOVACUUM, 到 VACUUM 优化实战,深入浅出,一看就懂 阅读详情

讨论了AUTOVACUUM的必要性,对于大型PostgreSQL数据库来说,AUTOVACUUM时必须的,而且优化好AUTOVACUUM对于大型PostgreSQL数据库来说至关重要。那么该如何来优化AUTOAVCUUM呢?今天我们就讨论一下优化AUTOVACUUM的一些常用的技巧。

首先我们要考虑的是三个基本的参数autovacuum_max_workers、maintenance_work_mem、autovacuum_freeze_max_age,这三个参数设置的合理,大部分AUTOVACUUM的问题都得到了解决。

autovacuum_max_workers指定了autovacuum使用的工作进程的数量,默认为3,对于绝大多数大型PostgreSQL数据库来说,这个值太小了。增加 autovacuum worker的数量意味着更多的进程可用于清理数据,这是面对数量非常多的表时需要考虑的问题。如果仅仅从autovacuum去考虑,理想情况下为每个 CPU 创建一个worker肯定会有最好的效率。因此worker的设置不应超过 CPU 的数量,但过多的worker可能会因 CPU 使用率的激增而对业务产生影响。通常应该将worker的数量设置为3-cpu_count之间。具体如何设置,需要在最大化autovacuum效率与整体系统性能之间进行平衡。如果你不知道该如何设置,那么最先设置为CPU_COUNT的1/2吧,如果在系统高峰期,CPU资源出现了瓶颈,那么适当缩小该值,如果CPU资源还很充足,但是autovacuum的性能不足,那么就增加这个值。

maintenance_work_mem,这个参数的值越大,vacuum的效率越高。不过要注意的是,当超出了每个设定后,增加该参数的效率会出现递减。太大的值会浪费内存资源,如果设置的太大耗尽了内存,那么就会产生十分严重的性能问题。对于较大的Post过热SQL数据库实例,如果物理内存充足,建议maintenance_work_mem至少设置为 1 GB,设置较大的参数将显着提高清理具有大量死元组的表的性能。 1 GB的维护工作内存足以一次处理大约 1.79 亿个死元组,如果你一次性要处理更多的死元组,那么还需要继续加大这个参数。如果这个参数设置不足以一次性清理如此多的死元组,那么会采用多次扫描的方式来清理,这样就会降低清理的性能。

autovacuum_freeze_max_age,合理设置此参数可以减少 TXID 回绕的机会。Max age越大,autovacuum运行的频率就越低,这样就可以减少整个系统的负载,降低业务高峰期的性能风险。但是和上面提及的所有 autovacuum 参数一样,参数的设置都具有两面性。将该值设置的太大,导致autovacuum延迟太久,那么可能会在autovacuum完成之前耗尽 txid 编号,从而导致服务器强制关闭以保护数据完整性。设置合理的参数取决于对你的系统的死元组年龄的持续观察。

可能对于很大一部分PostgreSQL数据库来说,合理设置了这三个参数就基本上可以高枕无忧了。不过我们往往会面临更为复杂的情况。对于电信、互联网、银行等的超大型的数据库来说,这三个参数还不足以解决autovacuum的问题。要彻底解决问题,那么就需要对这些系统级参数无法解决问题的表设置个性化的autovacuum参数。这些参数属于表的storage参数。通过ALTER TABLE .. SET STORAGE_PARAMETER可以进行个性化的设置。

Storage参数中,和Vacuum有关的参数很多。在数据库运行过程中,随着数据局的变化,死元组的数量也在增加。autovacuum 启动器进程持续监视数据库中的表,并在某张表中的死元组数量达到 autovacuum 阈值后为vacuum 作业选择正确的表。该阈值的计算是基于一些参数的设置的,这个设置可以是全局性的,也可以是针对某张表的(比如上面的storage参数),如autovacuum_vacuum_threshold,autovacuum_analyze_threshold,autovacuum_vacuum_scale_factor,和autovacuum_analyze_scale_factor。

autovacuum_vacuum_threshold 和 autovacuum_analyze_threshold这两个参数分别确定要为 autovacuum 和 autoanalyzer 表中从上一次vacuum后更新或删除的记录数的最小数量。两者的默认值都是 50。

autovacuum_vacuum_scale_factor 和 autovacuum_analyze_scale_factor参数分别确定要为 autovacuum 和 autoanalyzer 安排的表需要更改的表的百分比。默认autovacuum_vacuum_scale_factor值为 0.2 (20%) 和autovacuum_analyze_scale_factor 0.1 (10%)。

对于上述四个参数,如果表中的记录数不是很大,那么就可以使用全局的设置,默认的参数一般都没有太大问题。但是对于有大量行的超级大表,这些参数的默认值就完全不够用了。Vacuum threshold的计算公式如下:

vacuum threshold = autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * n_live_tup

其中n_live_tup是活动元组的数量,这个值可以从pg_stat_all_tables视图获得。一旦死元组的数量达到了这个限额,那么就可以启动vacuum作业。如果 postmaster 启动工作进程失败,它会在共享内存中设置一个标志并向启动进程发送一个信号。读取 postmaster 的信号,启动器再次尝试通过向 postmaster 发送信号来启动工作进程(postmaster 未能启动工作进程可能是因为高负载和内存压力或已经运行的进程太多)。

基于上面的原理,为某些大表设置合理的阈值,从而确保autovacuum在一种对业务系统影响尽可能小的平衡状态下运行,就可以确保业务系统长期稳定的运行。从另外一个角度来说,对于超大型的PostgreSQL数据库来说,加强对pg_stat_all_tables中相关的统计数据的监控,也可以为我们动态的优化autovacuum提供最为准确的依据。

解析 openGauss 的 AutoVacuum 机制及优化策略 AutoVacuum顾名思义就是“自动”进行的Vacuum操作 ,它是数据库系统的一个自动化功能,用于定期清理数据库表中的过时数据,释放存储空间,并更新表的统计信息。通过定期清理过时数据和更新统计信息,AutoVacuum 可以确保数据库的性能保持在一个良好的水平,提高系统的稳定性和可靠性。- log_autovacuum_min_duration:当自动清理的执行时间大于或者等于某个特定的值时,向服务器日志中记录本次自动清理执行的概要信息。设置此选项有助于追踪自动清理的行为。 阅读详情

相关推荐

postgresql autovaccum自动清理

postgresql autovaccum

日常博客 3439

postgresql回收机制autovacuum

postgresql autovacuum delete操作行不会立即从数据文件中删除,而是通过xmax字段将其标记删除 update操作可能在postgresql中被视为delete+insert ##dead tuples select schemaname,relname,n_dead_tup, (case when n_live_tup>0 then n_dead_tup::float8/n_live_tup::float8 else 0 end) aa from pg_stat_all_ta

归来仍少年 2098

PostgreSQL autovacuum详解(自动化清理空间)

PostgreSQL的autovacuum是一种自动化的维护工具,用于管理数据库中的空间和性能,以提高数据库的效率和可靠性。

一碗清深的博客 2128

PostgreSQL VACUUM之深入浅出 (五)

`autovacuum_freeze_max_age` 是 AUTOVACUUM 最不常用的参数,也基本不需要优化,但却是 AUTOVACUUM 最重要的一个参数,因为它与 wraparound 有关,即使 AUTOVACUUM 关闭,达到这个阈值,也会强制触发 AUTOVACUUM ,可见它有多重要。

荷塘月色 405

Isaac Sim仿真平台学习(2)系统架构

isaac sim系统架构

weixin_75067193的博客 2698

使用Python下载ECMWF的ERA-5数据

一、注册账号 [官网]https://www.ecmwf.int/ 二、登录后获取下载key https://cds.climate.copernicus.eu/api-how-to 如图右侧红色框中的内容复制保存为TXT文件,并重命名为“.cdsapirc”,注意前面有点,保存在 C:\Users\username\.cdsapirc,(WINDOWS系统),username指当前电脑登录账户。 三、安装cdsapi库 以pycharm为例: 在pycharm中依次打开:File>setting

wise_sun的博客 7705

PG数据库为什么要用autovacuum

我们可以看到,一个系统中的有些表的死元组比例十分高,有些表则很低。一个比较简单和常用的做法是,首先列出你的系统中的超过1GB的大表(这个阈值根据你的系统的特点去调整,我这里只是举例),然后分析其行数和死元组的数量,比例。甚至在给一个快递公司做一个执行计划稳定的优化的时候,我发现因为每天有几次大批量的数据写入,经常会导致某些时段中的表统计数据必然会导致错误的执行计划出现,因为应用中存在应用中动态拼凑SQL,导致所需的执行计划无法通过HINT固定,而白天业务高峰期经常对超大型的表做分析又风险太大。

DBAIOps的博客 728

深入Linux内核:PTP硬件时间戳(HW Timestamp)是如何炼成的?

本文深入探讨了Linux内核中PTP硬件时间戳(HW Timestamp)的实现原理与实战应用。通过分析IEEE 1588协议在网络时间同步中的关键作用,详细解析了硬件时间戳在Linux内核中的架构设计、驱动开发及性能优化技巧,帮助开发者实现纳秒级精度的时间同步。

weixin_30727835的博客 651

PG日志中出现 “canceling autovacuum task“

PG日志中出现 “canceling autovacuum task” 的错误信息通常是因为自动真空任务被取消了。因此,“canceling autovacuum task” 是一种正常现象,通常不需要特别处理。但如果频繁出现此类错误,建议检查是否存在锁冲突、长时间运行的事务或其他并发操作,并进行相应的优化和调整。

喝醉酒的小白 2065

从维纳滤波到Richardson-Lucy:图像去模糊算法的原理与实践

本文深入解析了图像去模糊的核心原理,重点对比了维纳滤波与Richardson-Lucy两种经典去卷积算法。维纳滤波在频域进行快速权衡,适用于高斯噪声场景;而Richardson-Lucy算法基于泊松噪声模型迭代优化,更适用于天文、显微等科学成像。文章通过Python代码实践,详细阐述了PSF(点扩散函数)的关键作用及算法选型指南。

weixin_29285605的博客 386

TexGen模型导出到ABAQUS的inp文件:如何快速修改纱线材料属性(避坑指南)

本文针对TexGen模型导出到ABAQUS的inp文件后纱线材料属性缺失或错误的问题,提供了高效的解决方案。文章详细解析了inp文件结构,指导用户如何手动定位并修改纱线材料属性,并提供了可批量处理的Python脚本,帮助用户快速、精准地完成材料参数赋值,有效提升复合材料仿真工作效率。

ice55的博客 602

Pg数据库日常维护操作指南

知道的越多不知道的越多,即使各种数据库直接都有相通的思想和不同的实现,关于pg数据库元祖分析和事务xid冻结,请持续关注我后续博客。

查拉图斯特拉talk的博客 2103

LeRobot 入门教程(十六)Isaac Lab LeIsaac 叠衣服、夹橙子仿真环境

LeRobotEnvHub现已支持通过LeIsaac进行机器人模仿学习,提供摘橙子、搬立方体等日常任务仿真环境。用户可通过HuggingFace共享环境,使用一行代码加载任务,支持随机动作测试和远程操控。系统提供云端仿真方案,无需本地GPU即可运行。当前支持4种任务环境,通过make_env函数切换,其中折叠布料任务需先调用initialize()函数。该平台集成了数据采集、转换和训练全流程,为机器人学习提供便捷工具链。

2506_90492529的博客 1483

大云海山数据库(He3DB)AutoVacuum源码解析

AutoVacuum是数据库基于MVCC(多版本并发控制)机制设计的自动化维护功能,其核心价值在于解决MVCC带来的固有问题,规避手动维护短板,保障数据库长期稳定运行,具体原因如下:1、 解决表膨胀问题:数据库执行update/delete操作时,不会直接删除旧元组,仅标记为“死元组”以保障并发事务可见性。这些死元组长期堆积会占用大量磁盘空间,导致表和索引体积膨胀,大幅增加查询扫描范围,降低执行效率,AutoVacuum可及时清理此类无效数据。

weixin_43544348的博客 729

【kubernetes】kubernetes kubeadm init 错误了 怎么回退?

因为虚拟机设置问题首先报错:然后我根据文章修改了核数。重启后,查看VIP运行所在机器,发现机器没有变化然后重新执行初始化后面报错了根据提供的信息,问题主要集中在 kubelet 未能成功启动控制平面组件,导致初始化过程超时。以下是可能的原因及相应的排查步骤:原因 1:kubelet 未运行或运行状态异常正如错误提示所指出,kubelet 可能未运行或处于不健康状态。请按照提示执行以下命令检查 kubelet 的状态和服务日志:根据输出结果,判断 kubelet 是否正常运行。后续一大堆错误。

九师兄 121

(ICLR 2025)【源码讲解+复现】TIMER-XL: Long-Context Transformers for Unified Time Series Forecasting

本文提出了一种统一的多变量时序预测模型Timer-XL,其核心创新包括:1)采用自回归解码器架构,将多变量时序预测统一为next-token预测问题;2)设计TimeAttention机制,通过相对位置编码和因果掩码捕获时序位置和变量间交互;3)支持长上下文预训练以提升零样本迁移能力。模型架构包含嵌入层、时间感知注意力块和预测头,采用MSE损失进行端到端训练。实验表明该方法在多种时序任务上表现优异,特别是在长跨度预测和少样本场景下。代码实现提供了完整的模型定义、数据加载和训练流程,支持自定义配置参数。

1146

PostgreSQL(十七)Autovacuum工具

Autovacuum是PG的一个后台进程,在9.6版本之后才出现,在PG实例启动时自动启动;每隔一分钟执行一次自动收集需要做Vacuum操作的表;当表的操作记录满足指定条件时,自动执行Vacuum操作;(1)一次可以运行多少个Autovacuum进程autovacuum_max_workers =3 (缺省值)#Autovacuum的工作进程个数参数,意为一次可以运行多少个Autovacuum进程,可以使用此参数,对工作进程进程管理。此参数运用在可能包含多个数据库的实例/群集上;

shmily_coco的博客 2555

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

PostgreSQL autovacuum 优化与调试 (1 触发 autovacuum 的条件)

PostgreSQL 的数据库系统中是需要进行autovacuum 进行表级别的数据清理的。在开始autovacuum 进行调优之前实际上是需要理解为什么需要autovacuum.长话短...

sql server的专栏 1199

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

pg13特性:仅插入表上的autovacuum

为什么会有仅插入表上的autovacuum,没有死元组也需要vacuum吗?

liuzhilong的博客 647

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

PostgreSQL13优化AUTOVACUUM说明

PostgreSQL13的AUTOVACUUM机制自动清理死元组、更新统计信息并冻结事务ID。对于10个以上数据库的实例,需优化默认参数(如增加worker数量、调整清理频率)。当数据库超过200个时,建议延长清理间隔并配合夜间定时脚本执行VACUUM ANALYZE操作。脚本会分析各数据库死元组数量,对超标数据库进行清理,避免影响日间性能。这种组合方案能平衡资源占用与清理效率。

weixin_40794002的博客 376

【数据库测试】PG数据库表膨胀及优化浅析

qquad本文对Postgresql数据库关系表膨胀、vacuum、autovacuum以及怎么监控和处理表膨胀做简单说明。表膨胀如何产生表的数据和索引占用文件系统的空间,在有效数据未发生大的变化情况下,占用空间不断增大,造成磁盘空间浪费。实际上MB的数据可能变为GB级别。表膨胀危害1) 空间持续上涨空间无法回收,需要执行高额代价vaccum full,但是vacuum full会对表加8级锁AccessExclusiveLock(访问排它锁),阻塞对象访问2)扫描效率变低。

test_dog的博客 1169

PostgreSql autovacuum

一、 概述 一系列参数控制 vacuum 的自动执行,这些设置可以被针对每个表的参数设置所覆盖。 二、 参数说明 **autovacuum(boolean) **:控制服务器是否运行自动清理启动器后台进程。默认为 on 开启, 不过要自动清理正常工作还需要启用 track_counts(默认 on 启用)。 log_autovacuum_min_duration:控制超过该值指定时间的自动清理操作写入日志,默认为 -1,禁止写入日志,设置为 0 会记录所有的自动清理动作。如果指定值时没有单位,则以毫秒为单

脑子进水养啥鱼?的博客 1594

autovacuum调优的基本知识

autovacuum调优的基本知识

liuzhilong的博客 1381

PostgreSQL autovacuum原理详解

1、概述 PostgreSQL的Vacuum可以帮助清除表中的死元组并释放空间,但是表上什么时候需要行vacuum操作呢? 一般来说不需要我们去手动进行vacuum操作,autovacuum进程会自动去对需要的表进行vacuum操作。 autovacuum进程会自动执行VACUUM和ANALYZE命令。启用后,将自动清理将检查具有大量插入,更新或删除的元组的表,然后根据阈值对表进行清理或分析。 那么autovacuum的阈值是多少呢?我们怎么才能知道哪些对象需要进行vacuum呢? 2、autovacuum

Focus on PostgreSQL 3937
上一篇: PG数据库为什么要用autovacuum
下一篇: 使用tuned profile来优化PG和Oracle数据库
DBAIOps社区
博客等级 码龄3年 970粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值