ITPub博客

首页 > 数据库 > 数据库开发技术 > PostgreSQL 17 vacuum功能增强

PostgreSQL 17 vacuum功能增强

原创 数据库开发技术 作者:象楚之行 时间:2024-06-08 19:00:00 0 删除 编辑

下面这篇文章整理过vacuum的一些实用功能:

8大vacuum实用技巧助您轻松管理数据库

  • 同时指定多个表

  • 跳过被锁住的表

  • 跳过索引清理

  • 并行清理索引

  • 配置内存用量

  • 快捷清理TOAST表

  • 解藕更新统计信息

  • schema级按需清理

已经发布的17 beta1对vacuum做了一些功能增强,本文将进行介绍。

vacuum内部优化

  • 使用新的TidStore结构更有效的存储元组,并突破内部固化的1GB限制

  • 合并了prune和freeze的WAL的记录格式,降低WAL生成量

  • 表没有索引时,vacuum剪枝阶段直接标记LP_UNUSED,跳过LP_DEAD标记处理

vacuum内存参数变化

guc参数vacuum_buffer_usage_limit默认值由256kB变为2MB,默认处理32个数据块太保守。

vacuum监控进度报告视图变化

pg_stat_progress_vacuum视图发生如下变化

  • max_dead_tuples字段名称变为max_dead_tuple_bytes

  • num_dead_tuples字段名称变为dead_tuple_bytes

上面两个字段由原来的统计元组数量改为统计字节量。

  • 增加indexes_total字段

  • 增加indexes_processed字段

例如下面可以观察到表上处理索引的进度为60%

...
phase | vacuuming indexes
index_total | 5
index_processed | 3

vacuum权限变化

新增预置角色pg_maintain允许普通用户执行vacuum维护操作,同时还包括analyze、reindex、refresh materialized view、cluster、lock table。

使用示例如下:

GRANT pg_maintain TO myuser;

另外也可细粒度控制到单个表:

GRANT maintain ON TABLE mytab TO myuser;

vacuumdb工具变化

vacuumdb工具–all选项可与–table, --schema, --exclude-schema同时使用来对所有数据库的对象进行处理。

例如下面的语句:

$ vacuumdb --all --schema pg_catalog

在16里执行会提示如下错误:

vacuumdb: error: cannot vacuum specific schema(s) in all databases

在17里可以正常执行:

vacuumdb: vacuuming database "postgres"
vacuumdb: vacuuming database "template1"

希望新版本新增的vacuum功能可以我们更好的做好数据清理工作。

推荐阅读

与我联系

  • 微信公众号:象楚之行

  • 墨天轮:https://www.modb.pro/u/15675

  • 微信:skypkmoon

勤耕细作,用心积微;静待花开,量变质成。

原文作者:象楚之行;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2018-06-12

  • 博文量
    102
  • 访问量
    50360