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

文章目录

  • 1. 什么是autovacuum
  • 2. autovacuum的作用
  • 3. 如何开启autovacuum
  • 4. autovacuum相关参数
    • 4.1 触发条件
    • 4.2 参数建议
    • 4.3 更改系统autovacuum相关参数
    • 4.4 更改单表autovacuum相关参数


1. 什么是autovacuum

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

2. autovacuum的作用

  1. 自动回收空间:当数据库中的数据被删除或更新时,空间不会立即释放,而是被标记为可重用。autovacuum会定期检查数据库中的空间使用情况,并回收被标记为可重用的空间,以便将其重新分配给新的数据。

  2. 避免表膨胀:当表中的数据被频繁删除或更新时,表可能会变得膨胀,即占用的空间超过实际需要的空间。autovacuum会自动检测并处理这种情况,以避免表膨胀导致性能下降。

  3. 维护统计信息:autovacuum还会自动更新数据库中的统计信息,这些统计信息用于查询优化器生成最优的执行计划。通过定期更新统计信息,autovacuum可以帮助数据库优化查询性能。

  4. 避免长时间锁定:当autovacuum执行时,它会获取表级别的锁定,以确保数据的一致性。然而,autovacuum会尽量避免长时间锁定,以允许其他查询和操作继续进行。

3. 如何开启autovacuum

默认情况下 autovacuum 是自动开启,但要正常工作还需要开启 track_counts,该参数也是默认开启的。

select name,setting,short_desc from pg_settings where name='track_counts'
union all
select name,setting,short_desc from pg_settings where name ='autovacuum';

请添加图片描述

4. autovacuum相关参数

# 默认为on,表示是否开启autovacuum, 自动执行VACUUM和ANALYZE命令。默认开启。特别的,当需要冻结xid时,尽管此值为off,PG也会进行vacuum。
autovacuum=on

# 两次vacuum间隔时间,默认10min。 这个naptime会被vacuum launcher分配到每个DB上。autovacuum_naptime/num of db。
autovacuum_naptime=1min

# 在规定时长内未完成的vacuum予以记录日志,单位ms,当vacuum动作超过此值时。 "-1"表示不记录。"0"表示每次都记录。
log_autovacuum_min_duration=500

# 默认值是3。 autovacuum最大线程数,CPU核多,并且IO好的情况下,可增加此值。
autovacuum_max_workers=3

# 每个worker可使用的最大内存数。
autovacuum_work_mem=64MB

# 当update,delete的tuples数量超过 autovacuum_vacuum_scale_factor * table_size + autovacuum_vacuum_threshold 时,进行vacuum。如果要使vacuum清理频繁,则将以下两个参数改小。
# 清理阀值,与autovacuum_vacuum_scale_factor配合使用,默认50。
autovacuum_vacuum_threshold=50
# 清理的缩放系数,默认值为0.2。
autovacuum_vacuum_scale_factor=0.2

# 以下两个参数控制analyze运行,和上面的两个参数配置类似。
# 当update,insert,delete的tuples数量超过 autovacuum_analyze_scale_factor * table_size + autovacuum_analyze_threshold时,进行analyze。
# analyze阀值,与autovacuum_analyze_scale_factor配合使用,默认50。
autovacuum_analyze_threshold=50
# analyze的缩放系数,默认值为0.1。
autovacuum_analyze_scale_factor=0.1

# 设置需要强制对数据库进行清理的XID上限值。
autovacuum_freeze_max_age=200000000
autovacuum_multixact_freeze_max_age=400000000

# 运行一次vacuum的时长,如果超过此值则休眠然后继续vacuum(vacuum很好I/O),如果为-1,取vacuum_cost_delay值。
autovacuum_vacuum_cost_delay=20ms

# 这个值是所有worker的累加值,如果为-1,取vacuum_cost_limit的值
autovacuum_vacuum_cost_limit=200

4.1 触发条件

autovacuum会在两种情况下会被触发:

1、当update,delete的tuples数量超过 autovacuum_vacuum_scale_factor * table_size + autovacuum_vacuum_threshold

2、指定表上事务的最大年龄配置参数 autovacuum_freeze_max_age,默认为2亿,达到这个阀值将触发 autovacuum 进程,从而避免 wraparound。

4.2 参数建议

1、autovacuum_max_workers的建议值为CPU核数/3。CPU资源充足,I/O性能较好时,可以适当加大。

2、对于更新频繁的交易系统,如果系统资源充足,可以缩小autovacuum_vacuum_scale_factor 与 autovacuum_vacuum_threshold,让vacuum清理频繁

4.3 更改系统autovacuum相关参数

-- 一个比例因子,用于确定何时触发自动化清理(vacuum)操作。较低的值表示更频繁的清理操作
ALTER SYSTEM SET autovacuum_vacuum_scale_factor = 0.03;

-- 一个比例因子,用于确定何时触发自动化分析(analyze)操作。较低的值表示更频繁的分析操作
ALTER SYSTEM SET autovacuum_analyze_scale_factor = 0.03;

-- 一个阈值,用于确定何时触发自动化清理操作。当表中的已删除行的数量超过该阈值时,自动化清理操作将被触发
ALTER SYSTEM SET autovacuum_vacuum_threshold = 300;

-- 一个阈值,用于确定何时触发自动化分析操作。当表中的已更新行的数量超过该阈值时,自动化分析操作将被触发
ALTER SYSTEM SET autovacuum_analyze_threshold = 300;

-- 重新加载PostgreSQL的配置文件,不会重新启动数据库服务
select pg_reload_conf ();

4.4 更改单表autovacuum相关参数

alter table tableA set (autovacuum_vacuum_scale_factor=0.03);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/321260.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git相关3 —— 命令及添加Gitee的公钥

1.Git相关命令1 -- 工作目录、暂存区、本地仓库、 使用平台有:cmd、Git bash、VSCode window系统修改VSCode默认终端为git bash git init 初始化 --- 新增.git 文件夹 git status 查看 文件/文件夹 状态 git add 需要追踪的文件名/文件夹名 提交到暂存区 git add…

SpringBoot集成Minio

pom文件导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

kubeadm部署

准备环境 master、node1、node2 关闭SWAP\SELINUX\FIREWALLD\开启网卡转发 配置YUM源 cat <<EOF > /etc/yum.repos.d/kubernetes.repo > [kubernetes] > nameKubernetes > baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_6…

基于深度学习的多类别电表读数识别方案详解

基于深度学习的多类别电表读数识别方案详解 多类别电表读数识别方案详解项目背景项目难点最终项目方案系列项目全集&#xff1a; 安装说明环境要求 数据集简介数据标注模型选型明确目标&#xff0c;开始下一步的操作 检测模型训练模型评估与推理番外篇&#xff1a;基于目标检测…

C++力扣题目701--二叉搜索树中的插入操作

给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&#xff0c;可能存在多种有效的插入方式&a…

蓝桥杯省赛无忧 STL 课件17 map

01 map 02 multimap 03 unordered_map 04 代码示例

微信商家转账到零钱怎么开通?场景模板

商家转账到零钱是什么&#xff1f; 使用商家转账到零钱这个功能&#xff0c;可以让商户同时向多个用户的零钱转账。商户可以使用这个功能用于费用报销、员工福利发放、合作伙伴货款或分销返佣等场景&#xff0c;提高效率。 商家转账到零钱的使用场景有哪些&#xff1f; 商家…

ES API 批量操作 Bulk API

bulk 是 elasticsearch 提供的一种批量增删改的操作API。 bulk 对 JSON串 有着严格的要求。每个JSON串 不能换行 &#xff0c;只能放在同一行&#xff0c;同时&#xff0c; 相邻的JSON串之间必须要有换行 &#xff08;Linux下是\n&#xff1b;Window下是\r\n&#xff09;。bul…

【AUTOSAR】--01 AUTOSAR网络管理基础

AUTOSAR网络管理做了几个项目了&#xff0c;但发现还是有些理解不够深入的地方&#xff0c;最近趁着有个新项目也要做AUTOSAR网络管理&#xff0c;再从头梳理一下AUTOSAR网络管理&#xff0c;预计用2-3篇文章&#xff0c;把AUTOSAR网络重新梳理完成。 这是第一篇&#xff0c;主…

鸿蒙开发-UI-组件-状态管理

鸿蒙开发-序言 鸿蒙开发-工具 鸿蒙开发-初体验 鸿蒙开发-运行机制 鸿蒙开发-运行机制-Stage模型 鸿蒙开发-UI 鸿蒙开发-UI-组件 文章目录 前言 一、什么是状态管理 二、管理组件拥有的状态 1.组件内状态 State装饰器 2.父子组价单向同步 Prop装饰器 3.父子双向同步 Link装…

yolov5模型Detection输出内容与源码详细解读

文章目录 前言一、Detiction类源码说明二、Detection类初始化参数解读三、Detection的训练输出源码解读四、Detection的预测输出源码解读1、self.grid内容解读2、xy/wh内容解读3、推理输出解读 总结 前言 最近&#xff0c;需要修改yolov5推理结果&#xff0c;通过推理特征添加…

青动CRM-E售后 售后工单CRM系统 erp系统 带前端小程序全开源可二开

应用介绍 一款基于FastAdminThinkPHP和uniapp开发的CRM售后管理系统&#xff0c;旨在助力企业销售售后全流程精细化、数字化管理&#xff0c;主要功能&#xff1a;客户、合同、工单、任务、报价、产品、库存、出纳、收费&#xff0c;适用于&#xff1a;服装鞋帽、化妆品、机械机…

change事件传递多个参数

1.传递value页面参数 change"handleChange($event,123)" 2.传递选中的keyvalue或是选中的item 我用的是a-auto-complete&#xff0c;试验了用a-select也可以 就是在option里面&#xff0c;:value"JSON.stringify(d)" 然后在eval(( value ))转化就可…

zepplin记录1

zepplin记录1 文章目录 zepplin记录1前言一、配置python环境二、测试可用性1.配置interpreter2.测试代码 总结 前言 Apache Zeppelin是一个开源的数据分析和可视化的交互式笔记本&#xff0c;类似于Jupyter Notebook。它支持多种编程语言&#xff08;如Scala、Python、R、SQL等…

智慧园区数字孪生智能可视运营平台解决方案:PPT全文82页,附下载

关键词&#xff1a;智慧园区解决方案&#xff0c;数字孪生解决方案&#xff0c;数字孪生应用场景及典型案例&#xff0c;数字孪生可视化平台&#xff0c;数字孪生技术&#xff0c;数字孪生概念&#xff0c;智慧园区一体化管理平台 一、基于数字孪生的智慧园区建设目标 1、实现…

【技术选型】Doris vs starRocks

比对结论 仅从当前能看到的数据中&#xff0c;相比于doris&#xff0c;starRocks在性能方面具备优势&#xff0c;且更新频率高&#xff08;降低维护成本&#xff09;。 目标诉求 并发性不能太低——相比于clickhouse不到100的QPS支持大表关联——降低数据清洗的压力&#xf…

【PlantUML】- 时序图

写在前面 本篇文章&#xff0c;我们来介绍一下PlantUML的时序图。这个相对类图来讲&#xff0c;比较简单&#xff0c;也不需要布局。读完文章&#xff0c;相信你就能实际操作了。 目录 写在前面一、基本概念二、具体步骤1.环境说明2.元素3.语法4.示例 三、参考资料写在后面系列…

Spring Boot 3 + Vue 3实战:引入数据库实现用户登录功能

文章目录 一、实战概述二、实战步骤&#xff08;一&#xff09;创建数据库&#xff08;二&#xff09;创建用户表&#xff08;三&#xff09;后端项目引入数据库1、添加相关依赖2、用户实体类保持不变3、编写应用配置文件4、创建用户映射器接口5、创建用户服务类6、修改登录控制…

【Fiddler抓包】微信扫码访问链接打不开网页

又来每天进步一点点~~~ 背景&#xff1a;某天发版的时候&#xff0c;手机连接电脑抓包查看用户登录之前的sessionID&#xff0c;由于业务需要&#xff0c;是需要用户登录微信扫码跳转至某一页面的&#xff0c;微信&#xff08;分身&#xff09;扫码成功&#xff0c;跳转时打不…

HarmonyOS 通过 animateTo讲解尺寸动画效果

上文 HarmonyOS讲解并演示 animateTo 动画效果 我们已经做出了基本的动画效果 也对 animateTo 的使用比较熟悉了 第一个参数是 配置动画参数的json 第二个参数 则是改变我们元素属性值的事件 但属性值 远远不止位置属性 本文 我们来说 通过尺寸变化 完成动画效果 如果你有看过…