背景

书接上文 KingbaseES应对表年龄增长过快导致事务回卷 ,有些特殊业务场景不能靠全局的autovacuum方法,例如大型数据库系统,频繁做update的系统,还有上文提到的做实时数据同步的系统,这个系统需要保证每条事务都单独提交,这些系统都有一个特点就是事务号消耗非常快、死亡元组增长速度非常快。尤其有些系统查看数据库下表的age,(上文有写到查看表age,与数据库age的sql语句)有多张表的age同时非常高。为了确保vacuum的效率更高,和避免vacuum不及时导致age被消耗殆尽。这样我们需要在表级设置autovacuum策略。

方法

[](javascript:void(0)

ALTER TABLE test2 SET (autovacuum_freeze_max_age = 100000, fillfactor = 100);
ALTER TABLE test=# \d+ test2
Table "public.test2"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+---------+-----------+----------+---------+----------+--------------+-------------
i | integer | | not null | | plain | |
j | text | | | | extended | |
Access method: heap
Options: autovacuum_enabled=true, toast.vacuum_truncate=true或者:
 test=# select reloptions from sys_class where relname='test2';
reloptions
\---------------------------
{autovacuum_enabled=true}
(1 row)

[](javascript:void(0)

可以看到options:这张test2表被单独设置了autovacuum freeze的阈值。设置阈值的方法是查看每张表的age倒序排列,针对每张表设置不同的vacuum阈值,这是为了freeze时避开vacuum消耗的I\O高峰,因为vacuum导致的I\O高峰可能影响业务进行。

vacuum有关其他建议

优化autovacuum的第一步是vacuum操作分配足够的工作内存,vacuum的工作过程由于篇幅过长这里不再赘述。maintenance_work_mem参数对应VACUUM的性能有着至关重要的作用,对应较大型的数据库系统,对物理内存比较充裕的系统,将maintenance_work_mem设置为2GB是比较常用的。另外一个和vacuum操作相关的参数autovacuum_work_mem默认为-1,表示不启动此参数,这时候vacuum操作就会参考maintenance_work_mem参数。当我们从sys_log中看到关键字automatic vacuum of table: ...... index scan 1,或者vacuum verbose 查看vacuum详情时,可以发现当index scan超过1,就说明maintenance_work_mem内存可能需要增加。

第二个重要的参数是autovacuum_max_workers,这取决于有多少张表的VACUUM操作可以并行执行,如果系统中有大量的小表,那么就建议把这个参数设置大一些。当然如果CPU资源不是很多,那么就不要设置太大的值。注意,autovacuum_max_workers进程并行工作十分消耗I\O资源,尤其是并发处理多个大表时。对于这个参数的合理设置还要根据具体场景,最好的效果是合理的并发能够及时vacuum freeze掉表age,并且I\O消耗没有达到上限,队列没有明显等待。

另外一个需要对表级设置vacuum的场景是,对于某些sql引用的表的统计信息需要及时收集,设置后,表级参数会优先于全局统计信息收集的阈值(当上次analyze以来表的新增记录超过 autovacuum_analyze_threshold + autovacuum_analyze_scale_factor*reltuples ,触发analyze。)这会影响执行计划的正确与否。

KingbaseESV8R6如何针对表单独设置vacuum策略的更多相关文章

  1. Windows 2008 - 由于管理员设置的策略,该磁盘处于脱机状态

    http://blog.sina.com.cn/s/blog_59cc90640102x8m4.html 查看原文:https://www.bxl.me/9279.html准备使用云主机挂机的时候呢出 ...

  2. 如何为基于windows验证的站点的某个页面、文件或文件夹单独设置匿名访问

    在MOSS的项目中,我们经常碰到要单独为基于windows验证的站点的某个页面.文件或文件夹单独设置匿名访问即不登录就可以直接访问.比如说站点的A的某些图片或文件URL存在B站点下的文件夹下.此时访问 ...

  3. 为你的Visual Studio单独设置代理服务器

    http://blog.sina.com.cn/s/blog_58c506600101tycn.html 最近,因为国内访问Visual Studio Online(微软的免费代码托管服务,以前叫Te ...

  4. 由于管理员设置的策略,该磁盘处于脱机状态-Win 2008 R2

    问题截图: 做了个小说网站www.114369.cn,使用的是云主机,系统是Win 2008 R2,进入服务器后发现磁盘有问题 只有c盘,没有d盘,提示:由于管理员设置的策略,该磁盘处于脱机状态 解决 ...

  5. 为github公开项目单独设置用户名

    背景: 由于在公司git的配置是公司内自己的用户id及邮箱,如果用同样的配置在github上提交公开项目,可能造成用户名及邮箱泄露,因此对于github上的项目,最好单独设置用户名,而每次在向gith ...

  6. 如何为SharePoint文档库、文件夹、文件单独设置权限

    在这里使用截图的方式简单描述两个问题:设置SharePoint Server文档库权限和文档库中的文件夹权限 一.设置SharePoint Server文档库权限 Figure 1 - 打开文档库后, ...

  7. LodRunner实现大负载测试的四部曲(配置系统参数、配置LR、修改脚本、设置组策略)

    见 http://www.51testing.com/?uid-97659-action-viewspace-itemid-210924 LoadRunner以下简称(LR)是目前业界最流行的压力测试 ...

  8. 如何给 FastAdmin 单独设置域名

    如何给 FastAdmin 单独设置域名 (声明:不建议给后台固定的域名,主要是安全问题) FastAdmin 是基于 ThinkPHP5 框架编写的,ThinkPHP 5 支持域名路由,可对模块单独 ...

  9. 为每一个应用程序池单独设置aspnet.config配置文件

    ASP.NET2.0之后的版本号就在各Framework的根文件夹下提供了一个aspnet.config文件.这个文件用来配置全局的一些信息,可是一直以来我们都没有怎么用过. ASP.NET4.0之后 ...

随机推荐

  1. 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾

    「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 目录 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 Part 0 第四单元作业架构设计 架构设计概要 AppRun ...

  2. 阿里云有奖体验:用PolarDB-X搭建一个高可用系统

    体验简介 场景将提供一台配置了CentOS 8.5操作系统和安装部署PolarDB-X集群的ECS实例(云服务器).通过本教程的操作,带您体验如何使用PolarDB-X搭建一个高可用系统,通过直接ki ...

  3. DNS 系列(一):为什么更新了 DNS 记录不生效?

    我们在上网时如果想要访问到另一台机器上的内容,通常只需要直接输入一串地址,例如:www.upyun.com,就能够准确访问到自己想要访问的网站.但是实际上这只是方便我们记忆的字符形式网络标识,真正让我 ...

  4. GitHub相关资料&&可以参加的开源项目

    GitHub相关的资料 有不懂的地方时可以看GitHub Docs. GitHub tutorial GitHub glossary GitHub的字典,可以看到里面特定的概念. All about ...

  5. 研发效能|Kubernetes核心技术剖析和DevOps落地经验

    本文主要介绍Kubernetes 的核心组件.架构.服务编排,以及在集群规模.网络&隔离.SideCar.高可用上的一些使用建议,尤其是在CICD中落地,什么是 GitOps. 通过此文可彻底 ...

  6. 一个豆瓣电影Top250爬虫

    一个爬虫 这是我第一次接触爬虫,写的第一个爬虫实例. https://movie.douban.com/top250 模块 import requests #用于发送请求 import re #使用正 ...

  7. 【Python3】列表字典集合元组

    1 列表 1.1 定义与索引 在Python中,第一个列表元素的下标为 0通过将索引指定为 -1 可以让Python返回最后一个列表元素 inventory = ['sword', 'armor', ...

  8. 【docker专栏7】容器自启动与守护进程停止后容器保活

    本文为大家介绍容器自启动以及docker 守护进程挂掉或者docker升级的情况下,如何保证容器服务的正常运行.主要包含三个部分 一.守护进程开机自启 在我们安装docker的时候,介绍过启动dock ...

  9. Linux串口编程进阶

    在<Linux串口编程>编程一文中介绍了串口应用中常用的基本操作,如:串口打开关闭.串口设置.数据收发等.本篇文章主要基于常规串口操作进行了扩充,主要介绍如下操作: Linux系统使用非标 ...

  10. 20220724-Java的继承

    目录 含义 代码示例 使用方法和注意事项 个人理解 含义 继承Extends 面向对象最显著的一个特性,继承是从已有的类中派生出新的类,新的类能吸收已有类的性和方法,并能扩展新的能力. 代码示例 cl ...