当前位置: 首页 > article >正文

GaussDB中的Vacuum和Analyze

GaussDB中的Vacuum和Analyze

  • 基本概念与区别
  • 手动Vacuum和Analyze
  • 查看Vacuum和Analyze记录
  • Autovacuum配置参数

基本概念与区别

使用VACUUM、VACUUM FULL和ANALYZE命令定期对每个表进行维护,主要有以下原因:

  • VACUUM FULL可回收已更新或已删除的数据所占据的磁盘空间,同时将小数据文件合并。
  • VACUUM对每个表维护了一个可视化映射来跟踪包含对别的活动事务可见的数组的页。一个普通的索引扫描首先通过可视化映射来获取对应的数组,来检查是否对当前事务可见。若无法获取,再通过堆数组抓取的方式来检查。因此更新表的可视化映射,可加速唯一索引扫描。VACUUM可避免执行的事务数超过数据库阈值时,事务ID重叠造成的原有数据丢失。
  • ANALYZE可收集与数据库中表内容相关的统计信息。统计结果存储在系统表PG_STATISTIC中。查询优化器会使用这些统计数据,生成最有效的执行计划。

📖 VACUUM与VACUUM FULL的主要区别:

  • VACUUM命令不会阻塞SELECT和DML语句,但是会阻塞ALTER TABLE语句。
  • VACUUM命令只是将被删除的dead tuples(死元组)标记为可重用,因此数据文件占用的实际物理磁盘空间并不会缩小。
  • VACUUM FULL命令会阻塞对表的所有读写操作,包括SELECT语句。
  • VACUUM FULL会物理删除dead tuples,把释放的空间交还给操作系统。本质上是新建了一个数据文件并把live tuples迁移过去,因此数据文件占用的磁盘空间会缩小到实际的数据量。

手动Vacuum和Analyze

使用VACUUM或VACUUM FULL命令,进行磁盘空间回收:

vacuum TABLE_NAME;                 --清理普通表
vacuum TABLE_NAME partition(P1);   --清理表分区

vacuum full TABLE_NAME;  --彻底回收死元组占用的空间 

使用ANALYZE语句更新统计信息:

analyze TABLE_NAME;
analyze verbose TABLE_NAME;  --更新表统计信息并输出相关信息

vacuum analyze TABLE_NAME;   --清理死元组的同时更新统计信息

⭐️维护建议:

  • 定期对部分大表做VACUUM FULL,在性能下降后为全库做VACUUM FULL,目前暂定每月做一次VACUUM FULL。
  • 定期对系统表做VACUUM FULL,主要是PG_ATTRIBUTE
  • 启用系统自动清理线程(AUTOVACUUM)自动执行VACUUM和ANALYZE,回收被标识为删除状态的记录空间,并更新表的统计数据。

查看Vacuum和Analyze记录

查看表的VACCUM和ANALYZE记录:

--所有表
select relname,last_vacuum,last_autovacuum,last_analyze,last_autoanalyze,
       vacuum_count,autovacuum_count,analyze_count,autoanalyze_count
from pg_stat_all_tables;

--仅系统表
select relname,last_vacuum,last_autovacuum,last_analyze,last_autoanalyze,
       vacuum_count,autovacuum_count,analyze_count,autoanalyze_count
from pg_stat_sys_tables;

--仅用户表
select relname,last_vacuum,last_autovacuum,last_analyze,last_autoanalyze,
       vacuum_count,autovacuum_count,analyze_count,autoanalyze_count
from pg_stat_user_tables;

字段含义:

  • last_vacuum:最近一次手动执行vacuum的时间;
  • last_autovacuum:最近一次自动执行vacuum的时间;
  • vacuum_count:手动执行vacuum的次数;
  • autovacuum_count:自动执行vacuum的次数;
  • last_analyze:最近一次手动执行表分析的时间;
  • last_autoanalyze:最近一次自动执行表分析的时间;
  • analyze_count:手动执行表分析的次数;
  • autoanalyze_count:自动执行表分析的次数。

Autovacuum配置参数

查看autovacuum相关的参数配置:

--是否开启了vacuum自动清理
SHOW autovacuum;          
      
--控制收集数据库活动的统计数据。开启autovacuum必须开启该参数      
SHOW track_counts;              

--能同时运行的自动清理线程的最大数量
SHOW autovacuum_max_workers;    

--仅在autovacuum设置为on的场景下生效,它控制autoanalyze或autovacuum的打开情况。
--analyze表示只执行autoanalyze,vacuum表示只执行autovacuum,
--mix表示autoanalyze和autovacuum都执行,none表示二者都不执行。
SHOW autovacuum_mode;           

--设置两次自动清理操作的时间间隔,默认60秒。
SHOW autovacuum_naptime;

--设置触发VACUUM的阈值。当表上被删除或更新的记录数超过设定的阈值时才会对这个表执行VACUUM操作。
SHOW autovacuum_vacuum_threshold;

--设置触发ANALYZE操作的阈值。当表上被删除、插入或更新的记录数超过设定的阈值时才会对这个表执行ANALYZE操作。
SHOW autovacuum_analyze_threshold;

http://www.kler.cn/a/506309.html

相关文章:

  • excel仅复制可见单元格,仅复制筛选后内容
  • 迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-新增 topeet子系统-编写 bundle.json文件
  • Docker
  • docker swarm 部署问题 和 指定节点部署服务
  • Linux网络_套接字_UDP网络_TCP网络
  • primitive 编写着色器材质
  • 3D打印汽车零部件
  • 【蓝桥杯嵌入式】串口空闲中断+DMA接收不定长数据
  • Swift语言的数据库编程
  • 【大语言模型】ACL2024论文-37 交互式文本到图像检索与大型语言模型:一种即插即用的方法
  • LeetCode 916. Word Subsets
  • pnpm add 和 pnpm install 的区别?
  • EE213 Lab virtuoso final project SRAM designlayout
  • SEO优化与版权保护:提升WordPress网站内容安全和价值
  • 朝天椒USB服务器在万家基金的前置机应用案例
  • 屏幕共享——局域网多个电脑信息分发屏幕分组-直播分享
  • 全面掌握WRF气象模拟与Python数据处理的集成应用与实践
  • C# 运算符和类型强制转换(用户定义的数据类型转换)
  • 如何查看特定版本的Spring源码
  • 深度剖析:NLP 领域基于 TF-IDF 和 Text-Rank 的关键字提取原理
  • Spring Boot集成Sharding-JDBC实现分库分表
  • 解密AIGC三大核心算法:GAN、Transformer、Diffusion Models原理与应用
  • Ubuntu打开文件夹不显示文件
  • 如何选择正确的电源 IC
  • 原神5.0单机版【完全无脑搭建】纯单机*稳定版*
  • 语法