怎么理解PostgreSQL中的参数autovacuum_max_workers

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

创新互联-专业网站定制、快速模板网站建设、高性价比麦盖提网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式麦盖提网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖麦盖提地区。费用合理售后完善,十余年实体公司更值得信赖。

概览

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”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


当前文章:怎么理解PostgreSQL中的参数autovacuum_max_workers
链接URL:http://myzitong.com/article/iedjse.html