温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么理解PostgreSQL中的参数autovacuum_max_workers

发布时间:2021-11-08 14:06:49 来源:亿速云 阅读:463 作者:iii 栏目:关系型数据库

这篇文章主要介绍“怎么理解PostgreSQL中的参数autovacuum_max_workers”,在日常操作中,相信很多人在怎么理解PostgreSQL中的参数autovacuum_max_workers问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解PostgreSQL中的参数autovacuum_max_workers”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

概览

PG的MVCC要求“过期”的数据不能马上被物理清除,而是标记为dead rows,这些dead rows后续会通过vacuuming过程清理。
vacuuming通过以下方式让数据库保持“健康”:
1.标记dead rows可用于存储新数据,这样可以避免不必要的磁盘浪费以及可以跳过dead rows以提升顺序扫描的性能;
2.更新vm(用于跟踪过期或已废弃的数据,反应在pages上)。这可以提升index-only scans的性能;
3.避免出现事务ID回卷而导致的数据库宕机。
PG提供了autovacuum机制,通过周期性的运行ANALYZE来收集最近频繁更新的数据表统计信息,基于这些统计信息autovacuum进行调度清理dead rows。

Worker个数

PG提供了配置参数autovacuum_max_workers用于配置autovacuum worker的个数,从直观的感觉来看,提升该参数意味着有更多的worker进程,可以有效的提升autovacuum的吞吐,但实际上由于autovacuum_vacuum_cost_limit参数的限制,单纯的提升autovacuum_max_workers并没有什么效果。
由于autovacuum_vacuum_cost_limit对成本的限制是全局的,也就是说该参数控制了全局的worker可达到的成本上限,就算提高了autovacuum_vacuum_cost_limit,吞吐量也不会有提升。打个比方,启用多线程往文件系统中写文件,但总的吞吐限制为10MB/s,每个线程的吞吐最多只能是(10MB/线程数)/s也就意味着不管你启用多少个线程,最高的吞吐也只能是10MB/s,除了增加线程数(autovacuum_max_workers)还需要增加总的吞吐限制(autovacuum_vacuum_cost_limit)。

个性化解决方案

PG提供了面向单个表的个性化autovacuum解决方案,可以在表级上设置autovacuum_vacuum_cost_limit、autovacuum_vacuum_cost_delay等参数。表上的autovacuum_vacuum_cost_limit参数不纳入到全局的统计数字中。

[local:/data/run/pg12]:5120 pg12@testdb=# create table t(id int);
CREATE TABLE
[local:/data/run/pg12]:5120 pg12@testdb=# ALTER TABLE t SET (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE
[local:/data/run/pg12]:5120 pg12@testdb=# ALTER TABLE t SET (autovacuum_vacuum_cost_delay = 10);
ALTER TABLE
[local:/data/run/pg12]:5120 pg12@testdb=#

到此,关于“怎么理解PostgreSQL中的参数autovacuum_max_workers”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI