如上篇文章提到,如果出现了autovacuum的问题,那么这可能是个悲伤的故事。怎么解决?

笔者觉得可以从如下几个方面着手去考虑解决问题,可以避免一些坑。
1) 持续观察,是不是autovacuum问题一直存在,如果只是偶尔出现一次,可能不需要那么慌张。因为很有可能是其他异常情况造成的。比如当时正在做大规模数据迁移等操作,这种操作如果是偶发的,大可不必在意。

2)
笔者一般的分析思路是从大到小,比如先检查外围的关键配置项,如果有必要的话,再去深究postgres
autovacuum相关的配置项。因为总体来说,调优和分析问题时要切记舍本逐末。就这个问题而言,我们知道数据库的读写操作,可以先分开看,这样比较容易理解。读,是从disk读取到OS(操作系统,如Windows/Linux等)
cache,再抓取到postgres cache(buffer),是这样一个过程。而写的操作相反,从postgres cache 先写到os
cache,再最后写入disk。所以说了那么多,是想表达,外围的设置非常关键,postgres服务器也应该预留足够的资源给操作系统(如内存,最好能达到20%,甚至更多一点),如果忽略了大的方面的配置检查和作业,很可能会使调优工作走向不归路。

3)如上篇文章提到的,autovacuum相关的配置,有大致12个之多,但是真正在开始调整这些参数时要注意的是,有些参数从我的经验来看,最好先不要动,比如“autovacumm_max_workers”;其默认值为3,当某些表dead

tuple增多时,特别是占用了50%以上tuples的时候,可以先调小参数“autovacuum_vacuum_scale_factor”的值。比如可以从默认的0.2调整为0.1,增加vacuum的频率,可能就能解决问题。autovacumm_max_workers最好先不动,是因为如果动了它,可能会有一些副作用,得不偿失,具体会在第4点说明。之前笔者在项目中就遇到了这样的坑。

4)如果此时vacuum的问题解决之后,发现有些SQL执行还是很慢,通过监控可能发现SQL执行时间起伏比较大。那么我们要知道一点的是,autovacuum过程不只做了vacuum的动作,其实还做了另外一个动作,那就是“Analyze",通俗来说,这个动作就是为了完成在tuples更新(磁盘更新)之后,执行计划也应该相应更新,以求得到最佳/最优执行计划等等,也很关键。大家可以通过调整“autovacuum_analyze_scale_factor”或参数“autovacuum_analyze_threshold”,如果对于表记录过多,如超过10000行,可以直接考虑调整前一个参数即可。

Autovacuum的问题调优,到这里告一段落。如果有其他问题或者项目中遇到奇怪的和autovacuum相关的问题,欢迎留言。谢谢!

转自微信公众号【TimTest】,原文地址为: https://mp.weixin.qq.com/s?__biz=MzI2OTYwMDc0MQ==&mid=2247483662&idx=1&sn=412f91a82b5373c72674e122c67c9d59&chksm=eadc9384ddab1a9232d9ef6c81563545c8ac3fe327dd57c9083f6d393951cbdfb5344a270ee4&token=2021082705&lang=zh_CN#rd

【转】postgreSQL​之autovacuum性能问题分析(二)的更多相关文章

  1. 【转】postgreSQL​之autovacuum性能问题分析(一)

    最近笔者在项目中遇到postgreSQL的性能问题,所以计划在公众号里写一个系列文章去追踪记录这些问题以及分析过程或解决方法. 本文主要是关于postgreSQL的autovacuum的问题.可能很多 ...

  2. TVM性能评估分析(二)

    TVM性能评估分析(二) Figure 1.  A bird's eye view of the µTVM + AutoTVM infrastructure Figure 2.  A standard ...

  3. Linux性能监控分析命令(二)—sar命令介绍

    性能监控分析的命令包括如下: 1.vmstat 2.sar 3.iostat 4.top 5.free 6.uptime 7.netstat 8.ps 9.strace 10.lsof ======= ...

  4. 【性能测试】常见的性能问题分析思路(二)案例&技巧

    上一篇介绍了性能问题分析的诊断的基本过程,还没看过的可以先看下[性能测试]常见的性能问题分析思路-道与术,精炼总结下来就是,当遇到性能问题的时候,首先分析现场,然后根据现象去查找对应的可能原因,在通过 ...

  5. SQL SERVER 查询性能优化——分析事务与锁(五)

    SQL SERVER 查询性能优化——分析事务与锁(一) SQL SERVER 查询性能优化——分析事务与锁(二) SQL SERVER 查询性能优化——分析事务与锁(三) 上接SQL SERVER ...

  6. SQLite入门与分析(二)---设计与概念(续)

    SQLite入门与分析(二)---设计与概念(续)   写在前面:本节讨论事务,事务是DBMS最核心的技术之一.在计算机科学史上,有三位科学家因在数据库领域的成就而获ACM图灵奖,而其中之一Jim G ...

  7. list 、set 、map 粗浅性能对比分析

    list .set .map 粗浅性能对比分析   不知道有多少同学和我一样,工作五年了还没有仔细看过list.set的源码,一直停留在老师教导的:"LinkedList插入性能比Array ...

  8. Android4.0图库Gallery2代码分析(二) 数据管理和数据加载

    Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...

  9. Android App性能评测分析-流畅度篇

    1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...

随机推荐

  1. 客户端操作 2 HDFS的API操作 3 HDFS的I/O流操作

    2 HDFS的API操作 2.1 HDFS文件上传(测试参数优先级) 1.编写源代码 // 文件上传 @Test public void testPut() throws Exception { Co ...

  2. 国际象棋棋盘输出-PHP代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. CSS动画实例:行星和卫星

    设页面中有<div class=" planet "></div>,用来绘制一个行星和卫星图形.这个图形包括三部分:行星.卫星和卫星旋转的轨道.定义. pl ...

  4. 从 BIO、NIO 聊到 Netty,最后还要实现个 RPC 框架!

    大家好,我是 「后端技术进阶」 作者,一个热爱技术的少年. 觉得不错的话,欢迎 star!ღ( ´・ᴗ・` )比心 Netty 从入门到实战系列文章地址:https://github.com/Snai ...

  5. Python | 多线程死锁问题的巧妙解决方法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第25篇文章,我们一起来聊聊多线程开发当中死锁的问题. 死锁 死锁的原理非常简单,用一句话就可以描述完.就是当多线程 ...

  6. js实现树级递归,通过js生成tree树形菜单(递归算法)

    方法封装: /** * 数据转换为树形(递归),示例:toTreeByRecursion(source, 'id', 'parentId', null, 'children') * @param {A ...

  7. java23种设计模式——八、组合模式

    目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式--四.原型模式 java23种设计模式-- ...

  8. WPF实现飞控姿态仪表盘控件Attitude dashboard

    一.概要 近期项目当中需要用到飞机控制仪表盘的姿态仪,一开始去各大网站搜索解决方案要么就是winfrom要么就是很老的代码根本不能运行更甚者是居然有的还要下载积分. 只能自己手动从0开始写一个控件.这 ...

  9. C# 解析获取Url参数值

    今天遇到一个需求,需要处理通过接口传过来的一个参数,参数内容为一个拼接好的Url地址,且该地址还会携带了一些额外的参数,包括但不限于数字,字符串,json串.样例如下: http://www.cple ...

  10. 理解Django 中Call Stack 机制的小Demo

    1.工作流程 request/response模式下,request并不是直接到达view方法,view方法也不是将返回的response直接发送给浏览器的,而是request由外到里的层层通过各种m ...