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

OGG工具实现MySQL同步到Oracle数据库

OGG工具实现MySQL同步数据到Oracle

Mrzhou的博客 1682

杰理蓝牙AC696X开发实战:自定义蓝牙名称与提示音配置指南

本文详细介绍了杰理AC696X蓝牙芯片开发中自定义蓝牙名称与提示音配置的完整实战指南。文章从SDK工具定位入手,逐步讲解如何通过配置工具修改蓝牙名称,并重点阐述了替换提示音的正确步骤与音频文件(如WAV格式、16kHz采样率)的详细参数要求,最后指导如何生成并验证最终固件,帮助开发者快速实现个性化设备定制。

weixin_29161719的博客 560

PG数据库为什么要用autovacuum

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

DBAIOps的博客 728

基于Mind+、MOTT实现人工智能

@基于Mind+、MOTT实现人工智能 人工智能实验 一、实验目的及要求 【一】实现人脸识别 【二】实现云数据库应用 【三】实现测温数据mqtt上传至物联网云平台 二、实验原理与内容 基于二哈实现多人人脸学习和识别 基于TinywebDB实现云数据库应用 基于EasyIoT实现mqtt数据上传。 三、实验软硬件环境 硬件:掌控板 软件:Mind+ 四、实验过程(实验步骤、记录、数据、分析) 1.基于二哈实现多人人脸学习和识别 ①在Mind+扩展上的传感器选项选择HUSKYLENS AI 摄像头 ②配置哈士

weixin_44606930的博客 2374

PG日志中出现 “canceling autovacuum task“

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

喝醉酒的小白 2065

别再手动调参了!用MATLAB+改进PSO算法,5步搞定机械臂轨迹优化(附完整代码)

本文介绍如何利用MATLAB和改进PSO算法快速优化机械臂轨迹规划,仅需5步即可完成传统耗时的手动调参过程。通过混沌初始化、自适应权重等创新方法,改进PSO算法显著提升优化效率,实现全局最优解搜索,适用于工业自动化中的机械臂控制。文章包含完整MATLAB代码实现,帮助工程师轻松应用于实际生产场景。

weixin_29232121的博客 354

高德地图可视化入门:零基础用Python+高德API打造你的第一个热力图

本文详细介绍了如何使用Python和高德地图API从零构建商业级热力图。通过环境配置、地理编码、数据清洗到最终可视化展示的全流程指南,帮助开发者快速掌握地图可视化技术,特别适合展示商圈人流、疫情热点等地理分布数据。

weixin_29053067的博客 305

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

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

查拉图斯特拉talk的博客 2103

AI辅助发明专利撰写实战:30分钟高效生成高质量技术专利文档

在技术专利撰写领域,尤其是软件、算法或系统架构相关的发明专利,如何将创新的技术构思快速、规范地转化为符合《专利法》要求的申请文件,是许多开发者和技术团队面临的共同挑战。传统的人工撰写方式不仅耗时耗力,对撰写人的法律和技术双重背景要求极高,还容易因格式或术语不规范导致审查意见增多。本文将分享一套利用 AI 辅助工具,系统化、高效率地完成一篇高质量发明专利说明书撰写的实战流程。通过清晰的步骤拆解、可复制的提示词(Prompt)工程以及关键注意事项,即使是首次接触专利撰写的开发者,也能在短时间内掌握从技术方案梳理

子夜轻风 952

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

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

weixin_43544348的博客 729

《多模态融合改进》目录一览 | 专栏介绍 :全网 第一份 完整的多模态改进教程,提供《多模态模型改进完整项目包》-开箱即用

在大家订阅专栏后,便可获得多模态模型改进完整项目包-开箱即用,方便简单

Limiiiing的博客 1万+

Python爬虫终极指南:异步爬虫+Playwright逆向,高效爬取携程旅游数据

Playwright解决动态渲染和加密参数难题,模拟真实浏览器环境;aiohttp异步提升抓取效率,结合代理池和并发控制规避风控;指纹伪装、行为模拟等技巧大幅降低被检测概率。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2950

PostgreSQL(十七)Autovacuum工具

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

shmily_coco的博客 2555

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

sql server的专栏 1199

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pg13特性:仅插入表上的autovacuum

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

liuzhilong的博客 647

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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、付费专栏及课程。

余额充值