ITPub博客

首页 > 数据库 > 数据库开发技术 > 8大vacuum实用技巧助您轻松管理数据库

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

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

欢迎关注公众号, 持续发布PostgreSQL、openGauas/MogDB等PG系数据库干货文章。

PostgreSQL在线表清理是由autovacuum进程完成,计划内的autovacuum操作有资源管控限制。部分业务场景(例如批量更新),还需及时手工调用vacuum命令或vacuumdb工具来进行一些更为灵活的操作。

本文介绍vacuum的如下8个进阶功能:

  • 同时指定多个表

  • 跳过被锁住的表

  • 跳过索引清理

  • 并行清理索引

  • 配置内存用量

  • 快捷清理TOAST表

  • 解藕更新统计信息

  • schema级按需清理

1.同时指定多个表

从PostgreSQL 11开始,vacuum命令支持同时指定多个表进行操作:

postgres=# VACUUM tab1, tab2;
VACUUM

2.跳过被锁住的表

从PostgreSQL 12开始,vacuum命令可以跳过被锁住的表,使操作能够执行完成而不会一直处于等待状态。

postgres=# VACUUM (SKIP_LOCKED) foo;
WARNING: skipping vacuum of "foo" --- lock not available
VACUUM

使用SKIP_LOCKED选项后,可看到一条表被锁住跳过执行的警告信息。

3.跳过索引清理

很多场景下索引的清理往往占大头,PostgreSQL 12里表和索引的清理操作支持解耦,允许vacuum命令显式设置INDEX_CLEANUP选项,语法参考如下:

VACUUM (VERBOSE, INDEX_CLEANUP off) foo;

假如有一个带有很多索引的表,我们计划对该表重建索引。操作之前,可以先单独清理表,否则常规操作会同时清理索引。

4.并行清理索引

从PostgreSQL 13开始,索引清理在单表上支持并行操作,每个索引都可以分配一个工作清理进程。它的使用语法参考如下:

VACUUM (PARALLEL 8) foo;

并行度可以简单的按CPU的核数进行设置,充分利用CPU,提高清理效率。

5.配置内存用量

在PostgreSQL 16里,vacuum命令可以使用BUFFER_USAGE_LIMIT选项控制内存使用量。参考语法如下:

VACUUM (BUFFER_USAGE_LIMIT 0) foo;

针对大表的清理操作使用该选项,设置为0,允许使用所有shared buffer,最大化利用buffer cache。

6.快捷清理TOAST表

数据行受限于不能跨page存储,因而每个table可能会有一个与之关联且隐藏的TOAST表。

在PostgreSQL 16里,vacuum命令可以使用PROCESS_MAIN选项只处理主表数据,或者设置为false只处理附属的TOAST表。参考语法如下:

VACUUM (PROCESS_MAIN false) foo;

PROCESS_MAIN选项设置为false,可以通过主表来快捷清理TOAST表,否则需要从pg_class表进行关联查询获取TOAST表的名称。

7.解藕更新统计信息

vacuum命令如果操作的表很多, 每次清理更新数据库维度的统计信息性能会很差。

PostgreSQL 16里可以使用SKIP_DATABASE_STATS选项暂不更新统计信息,等所有表清理完成之后再使用ONLY_DATABASE_STATS选项统一操作。

例如下面在清理表时都使用SKIP_DATABASE_STATS选项跳过更新统计信息。

VACUUM (SKIP_DATABASE_STATS) tab1;
VACUUM (SKIP_DATABASE_STATS) tab2;
...

最后再只做一次更新统计信息的操作。

VACUUM (ONLY_DATABASE_STATS)...

8.schema级按需清理

多租户场景下,在PostgreSQL 16里,vacuumdb工具可指定schema或排除schema来进行黑白名清理。

使用–schema选项只处理某些模式下的对象,例如:

$ vacuumdb --schema schema1 --schema schema2

使用–exclude-schema选项跳过处理某些模式下的对象,例如:

$ vacuumdb --exclude-schema schema1 --exclude-schema schema2

本文到此结束,希望这8个功能可以帮您更好的做好数据清理工作!

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

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

注册时间:2018-06-12

  • 博文量
    102
  • 访问量
    50378