iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >PostgreSQL VACUUM 之深入浅出 (三)
  • 501
分享到

PostgreSQL VACUUM 之深入浅出 (三)

PostgreSQLVACUUM之深入浅出(三) 2020-02-23 13:02:07 501人浏览 无得
摘要

VACUUM 相关参数 对 VACUUM 有了一定的了解之后,下面系统介绍下 VACUUM 相关参数。 VACUUM 相关参数主要分为三大类。 第一类 与资源相关参数 #----------------------------- # RE

PostgreSQL VACUUM 之深入浅出 (三)

VACUUM 相关参数

对 VACUUM 有了一定的了解之后,下面系统介绍下 VACUUM 相关参数。

VACUUM 相关参数主要分为三大类。

第一类 与资源相关参数

#-----------------------------
# RESOURCE USAGE (except WAL)
#-----------------------------
# - Memory -
#maintenance_work_mem = 64MB            # min 1MB
#autovacuum_work_mem = -1               # min 1MB, or -1 to use maintenance_work_mem
# - Cost-Based Vacuum Delay -
#vacuum_cost_delay = 0                  # 0-100 milliseconds (0 disables)
#vacuum_cost_page_hit = 1               # 0-10000 credits
#vacuum_cost_page_miss = 10             # 0-10000 credits
#vacuum_cost_page_dirty = 20            # 0-10000 credits
#vacuum_cost_limit = 200                # 1-10000 credits

这里有两部分。

第一部分是内存相关。主要是 autovacuum_work_mem,默认值为 -1,即同 maintenance_work_memmaintenance_work_mem 默认值为 64MB。

第二部分是 Cost-Based Vacuum Delay。

当 VACUUM 工作超出一定量之后,会 sleep 一段时间。

一定量是多少呢?是 vacuum_cost_limit。默认值为 200。

sleep 多长时间呢?是 vacuum_cost_delay 。默认值是 0,即不 sleep。

工作量又是怎么算出来的?根据要 VACUUM 的 page 的不同,其 cost 是不一样的。

以下是三种不同 page 的 cost,默认值分别为 1、10、20,基本不用调整。

vacuum_cost_page_hit - The estimated cost for vacuuming a buffer found in the shared buffer cache.

vacuum_cost_page_miss - The estimated cost for vacuuming a buffer that has to be read from disk.

vacuum_cost_page_dirty - The estimated cost charged when vacuum modifies a block that was previously clean.

日常工作中手动 VACUUM 时主要调整 vacuum_cost_limitvacuum_cost_delay 。如调整为:

vacuum_cost_delay = 2
vacuum_cost_limit = 2000

即当 VACUUM 工作量超出 2000 之后,sleep 2ms。

需要注意,手动 VACUUM 和 AUTOVACUUM 的参数是不一样的。当 AUTOVACUUM 参数为 -1 时,则同手动 VACUUM 参数。

手动 VACUUM 对应的参数是 maintenance_work_memvacuum_cost_delayvacuum_cost_limit

AUTOVACUUM 对应的参数是 autovacuum_work_memautovacuum_vacuum_cost_delayautovacuum_vacuum_cost_limit

可以从下面 AUTOVACUUM 参数中可以看到, autovacuum_vacuum_cost_delay 默认值为 20ms,这样的话,AUTOVACUUM 运行时其对数据库影响较小。postgresql 12 开始,其默认值调整为了 2ms。

#autovacuum_vacuum_cost_delay = 20ms    # default vacuum cost delay for
                                        # autovacuum, in milliseconds;
                                        # -1 means use vacuum_cost_delay
#autovacuum_vacuum_cost_limit = -1      # default vacuum cost limit for
                                        # autovacuum, -1 means use
                                        # vacuum_cost_limit

第二类 AUTOVACUUM 相关参数

#------------------------------------------------------------------------------
# AUTOVACUUM
#------------------------------------------------------------------------------

#autovacuum = on                        # Enable autovacuum subprocess?  "on"
                                        # requires track_counts to also be on.
#log_autovacuum_min_duration = -1       # -1 disables, 0 logs all actions and
                                        # their durations, > 0 logs only
                                        # actions running at least this number
                                        # of milliseconds.
#autovacuum_max_workers = 3             # max number of autovacuum subprocesses
                                        # (change requires restart)
#autovacuum_naptime = 1min              # time between autovacuum runs
#autovacuum_vacuum_threshold = 50       # min number of row updates before
                                        # vacuum
#autovacuum_analyze_threshold = 50      # min number of row updates before
                                        # analyze
#autovacuum_vacuum_scale_factor = 0.2   # fraction of table size before vacuum
#autovacuum_analyze_scale_factor = 0.1  # fraction of table size before analyze
#autovacuum_freeze_max_age = 200000000  # maximum XID age before forced vacuum
                                        # (change requires restart)
#autovacuum_multixact_freeze_max_age = 400000000        # maximum multixact age
                                        # before forced vacuum
                                        # (change requires restart)
#autovacuum_vacuum_cost_delay = 20ms    # default vacuum cost delay for
                                        # autovacuum, in milliseconds;
                                        # -1 means use vacuum_cost_delay
#autovacuum_vacuum_cost_limit = -1      # default vacuum cost limit for
                                        # autovacuum, -1 means use
                                        # vacuum_cost_limit

以下参数前面已有提到,一般调整为通用配置后基本不调整,调整的话多是调整表级的参数,即根据不同的表设置不同的参数

#autovacuum = on
#log_autovacuum_min_duration = -1
#autovacuum_naptime = 1min
#autovacuum_vacuum_threshold = 50
#autovacuum_analyze_threshold = 50
#autovacuum_vacuum_scale_factor = 0.2
#autovacuum_analyze_scale_factor = 0.1
#autovacuum_vacuum_cost_delay = 20ms
#autovacuum_vacuum_cost_limit = -1

下面两个参数是当某个表的 age 达到一定阈值后,AUTOVACUUM 会对整个数据库实例进行 aggressive vacuum 以避免 wraparound,即使表没有 dead tuple。数据库运行良好的话,很少会触发。

#autovacuum_freeze_max_age = 200000000
#autovacuum_multixact_freeze_max_age = 400000000

当数据库中表比较多,甚至一个实例中数据库也比较多的情况,可适当增大 autovacuum_max_workers

#autovacuum_max_workers = 3             # max number of autovacuum subprocesses
                                        # (change requires restart)

问题来了,增大 autovacuum_max_workers 后,一定会提高 AUTOVACUUM 速度吗?

这里需要注意,autovacuum_vacuum_cost_limit 是所有 autovacuum worker 所用 cost 之和达到 limit 之后 sleep,增大 autovacuum_max_workers 之后,每个 worker 平均的 cost limit 就小了,即就相对更容易达到 limit,这样做同样的工作,就会 sleep 更多的时间,反而就更慢了。

所以,在增大 autovacuum_max_workers 之后,可以相应比例增大 autovacuum_vacuum_cost_limit

第三类 FREEZE 相关参数

以下是 FREEZE 相关参数,以后将系统介绍 FREEZE,本文不再展开讨论。

#------------------------------------------
# CLIENT CONNECTION DEFAULTS
#------------------------------------------
#vacuum_freeze_min_age = 50000000
#vacuum_freeze_table_age = 150000000
#vacuum_multixact_freeze_min_age = 5000000
#vacuum_multixact_freeze_table_age = 150000000

公众号

关注 DBA Daily 公众号,第一时间收到文章的更新。
通过一线 DBA 的日常工作,学习实用数据库技术干货!

公众号优质文章推荐

Postgresql VACUUM 之深入浅出

华山论剑之 PostgreSQL sequence

[PG Upgrade Series] Extract Epoch Trap

[PG Upgrade Series] Toast Dump Error

gitLab supports only PostgreSQL now

Mysql or PostgreSQL?

PostgreSQL hstore Insight

ReIndex 失败原因调查

PG 数据导入 Hive 乱码问题调查

PostGIS 扩展创建失败原因调查

原文地址:https://www.cnblogs.com/dbadaily/archive/2022/02/26/vacuum3.html

您可能感兴趣的文档:

--结束END--

本文标题: PostgreSQL VACUUM 之深入浅出 (三)

本文链接: https://www.lsjlt.com/news/9122.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 深入浅出PyTorch(一)之mac安装
    改用Linux了,笔记改到这里: https://blog.csdn.net/weixin_41794514/article/details/126850887spm=1001.2014.3001.5...
    99+
    2023-09-12
    pytorch macos python
  • C#异步编程由浅入深(三)之详解Awaiter
      上一篇末尾提到了Awaiter这个类型,上一篇说了,能await的对象,必须包含GetAwaiter()方法,不清楚的朋友可以看上篇文章。那么,Awaiter...
    99+
    2024-04-02
  • 深入浅出MappedByteBuffer(推荐)
    目录1.内存管理2.MappedByteBuffer的深度剖析2.1 map过程2.2 get过程3.性能分析4.总结java io操作中通常采用BufferedReader,Buf...
    99+
    2022-12-10
    深入浅出MappedByteBuffer MappedByteBuffer
  • 深入浅出JS的Object.defineProperty()
    目录前言对象的定义与赋值Object.defineProperty()语法说明属性的特性以及内部属性属性描述符数据描述符 --特有的两个属性(value,writable)存取描述符...
    99+
    2024-04-02
  • 深入浅出讲解Java集合之Collection接口
    目录一、集合框架的概述二、集合框架(Java集合可分为Collection 和 Map 两种体系)三、Collection接口中的方法的使用四、集合元素的遍历操作A. 使用(迭代器)...
    99+
    2024-04-02
  • 深入浅出讲解Java集合之Map接口
    目录一、Map接口继承树二、Map接口中的常用方法三、源码分析1.HashMap的底层实现原理?2.LinkedHashMap的底层实现原理(了解)四、Collections工具类一...
    99+
    2024-04-02
  • 深入浅出Golang中的sync.Pool
    目录一、原理分析1.1 结构依赖关系图1.2 用图让代码说话1.3 Put过程分析二、学习收获2.1 如何自己实现一个无锁队列学习到的内容: 1.一个64位的int类型值,充分利用高...
    99+
    2023-03-13
    Golang sync.Pool原理 Golang sync.Pool使用 Golang sync.Pool
  • JavaScript深入浅出__proto__和prototype
    目录构造函数和实例prototypeconstructor原型对象的原型原型链扩展知识总结首先我们先记住几个知识点: 每个函数都有一个prototype属性每个对象都有一个__pro...
    99+
    2024-04-02
  • 深入浅出Python中三个图像增强库的使用
    目录介绍ImgaugAlbumentationsSOLT结论介绍 本文中探索三个流行的 Python 图像增强库。 图像分类器通常在训练更多的图像时表现得更好。在图像分类模型中,一个...
    99+
    2024-04-02
  • 深入浅出JAVA MyBatis-快速入门
    目录创建项目前的环境搭建简介特点(开始)创建Maven项目,导入依赖创建一个新的Maven项目(开始)在数据库中创建表创建表详细信息从 XML 中构建 SqlSessionFacto...
    99+
    2024-04-02
  • 深入浅出理解PHP原理之变量赋值
    PHP的变量赋值 这个标题估计很多人会不屑一顾,变量赋值?excuse me?我们学开发的第一课就会了好不好。但是,就是这样基础的东西,反而会让很多人蒙圈,比如,值和引用的关系。今天...
    99+
    2024-04-02
  • C++深入浅出探索模板
    目录非类型模板参数模板特化函数模板特化类模板特化全特化偏特化模板分离编译模板的分离编译解决方法总结非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参:出现在模板参数列表中,...
    99+
    2024-04-02
  • Python深入浅出分析元类
    目录一、类和对象二、type类三、元类Metaclass四、自定义一个元类一、类和对象 Python属于动态类型的语言,而动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时...
    99+
    2024-04-02
  • 揭秘go语言反射的奥秘:三定律深入浅出
    go语言反射的三大定律:所有类型以 reflect.type 值表示,封装了类型信息。所有值以 reflect.value 值表示,封装了值信息,可间接操作。通过 reflect.val...
    99+
    2024-04-08
    go语言 反射
  • 深入浅出KNN算法(二) sklearn
    姊妹篇: 深入浅出KNN算法(一) 原理介绍 上次介绍了KNN的基本原理,以及KNN的几个窍门,这次就来用sklearn实践一下KNN算法。 要使用sklearnKNN算法进行分类,我们需要先了解sklearnKNN算法的一些基本参数,...
    99+
    2023-01-31
    深入浅出 算法 KNN
  • Java 深入浅出掌握Map集合之双列集合
    目录前言Map集合Map概述Map特点Map集合的功能Map集合的遍历Map集合的各个子类集合框架图总结前言 友友们,大家好哇!这一期我为大家带来双列集合(Map)的相关知识点讲解,...
    99+
    2024-04-02
  • 深入浅析Go中三个点(...)用法
    ‘…' 其实是go的一种语法糖。 它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。 第二个用法是slice可以被打散进行传递。 实例: packa...
    99+
    2024-04-02
  • Java深入浅出说流的使用
    目录一、File类的使用A.常用构造器B.路径分隔符C.常用方法二、流的分类及其体系输入、输出的标准化过程1.输入过程2.输出过程三、流的详细介绍1.字节流和字符流2.节点流和处理流...
    99+
    2024-04-02
  • 深入浅出RocketMQ的事务消息
    目录事务消息发送流程发送事务消息源码分析事务消息回查事务消息发送流程 半消息实现了分布式环境下的数据一致性的处理,生产者发送事务消息的流程如上图所示,通过对源码的学习,我们可以弄清...
    99+
    2023-05-15
    RocketMQ事务消息原理 RocketMQ事务消息使用 RocketMQ事务消息 RocketMQ事务
  • 深入浅出解析Java ThreadLocal原理
    目录1.了解ThreadLocal简介使用2.源码解析 – 探究实现思路threadLocals变量与ThreadLocalMapset(T value) 方法get() 方法rem...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作