原文地址:Accelerating VACUUM in Postgres
原文作者:Alexei Kozlov
几天前,我们在博客中收到了一个问题,即一旦进程启动,是否可以加速大型表的 VACUUM。
简而言之,一旦 VACUUM 开始工作,就不可能影响其速度。
造成这种情况的主要原因是,此过程中的大部分资源都用于磁盘操作,而且速度不是很快。此外,仍然需要为常规数据库进程留出足够的资源。
考虑到这一点,可以更改系统首选项,以允许单个 VACUUM 工作人员加快其性能。
为此,您需要部署相当“激进”的配置。这样 VACUUM 进程(确切地说是 AUTOVACUUM)将更频繁地启动,但每次启动这些进程将需要更少的操作,从而减少整体工作时间。
下面是 AUTOVACUUM 参数的设置过程:
- 1.分配适当的数量
autovacuum_max_workers(默认为 3,这是低的,所以像 10 会更合适)。 - 2.增加
AUTOVACUUM检查启动的频率(= 1 秒,默认为 – 1 分钟)。autovacuum_naptime - 3.降低触发
AUTOVACUUM启动的阈值 ( = 50, = 10, = 0.05, = 0.05)。autovacuum_vacuum_thresholdautovacuum_analyze_thresholdautovacuum_vacuum_scale_factorautovacuum_analyze_scale_factor - 4.降低触发
FREEZE的阈值(= 5000000,= 15000000)vacuum_freeze_min_agevacuum_freeze_table_age
参数需要重新启动服务,而其他参数可以在不中断服务的情况下进行修改。autovacuum_max_workers
使用上述参数将增加 AUTOVACUUM 访问表的频率,同时将其工作分解为更小的部分。在这些变化之后,VACUUM 的启动将需要较低的工作负载份额,进而加快整体命令的执行速度。
此外,可以为 VACUUM 命令设置更“激进”的参数值(= 0、= 0、= 1、= 10、= 100)。这允许 VACUUM 以牺牲其他服务器进程和减少服务器工作负载之间的暂停限制为代价来利用更多资源。vacuum_cost_delayvacuum_cost_page_hitvacuum_cost_page_missvacuum_cost_page_dirtyvacuum_cost_limit
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




