PostgreSQL中与AUTOVACUUM IO相关的参数是什么


本篇内容介绍了“PostgreSQL中与AUTOVACUUM IO相关的参数是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!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。autovacuum逐张表进行处理,从磁盘或者memory读取pages,如这些pages需清理dead rows则需要执行更新/写入pages操作,因此涉及到IO。为了让IO更为平滑而不影响正常的数据库操作,PG提供了相关的参数用于控制autovacuum的执行频繁程度,以免在数据库压力很大的情况下出现IO问题。autovacuum_vacuum_cost_limit : total cost limit autovacuum could reach (combined by all autovacuum jobs).执行autovacuum的成本上限。
autovacuum_vacuum_cost_delay : autovacuum will sleep for these many milliseconds when a cleanup reaching autovacuum_vacuum_cost_limit cost is done.达到成本上限后,autovacuum需要休息多久,以毫秒为单位。
vacuum_cost_page_hit : Cost of reading a page that is already in shared buffers and doesn’t need a disk read.在缓存中命中pages时的成本。
vacuum_cost_page_miss : Cost of fetching a page that is not in shared buffers.没有在缓存中命中时的成本。
vvacuum_cost_page_dirty : Cost of writing to each page when dead tuples are found in it.如pages中存在dead rows时的处理成本。上述参数的默认值为:根据上述参数,下面我们来推算下每秒autovacuum会产生的IO。
autovacuum_vacuum_cos免费云主机域名t_delay设定为20ms,那么每秒可以有50轮的autovacuum:50=1s/20ms。
内存读:假设全部在缓存中命中,意味着读取200个pages,200=autovacuum_vacuum_cost_limit/vacuum_cost_page_hit=200/1,可以推算出Read IO Rate=50*200*8K/s≈80MB/s;
OS读:假设全部没有命中,意味着要从OS(page cache或者disk)中读取20个pages,20=autovacuum_vacuum_cost_limit/vacuum_cost_page_miss=200/10,Read IO Rate=50*20*8K/s≈8MB/s;
:假设读出来的page都有dead rows需要处理,那么需要写入10个pages,10=autovacuum_vacuum_cost_limit/vacuum_cost_page_dirty=200/20,Write IO Rate=50*10*8K/s≈5MB/s;相对于现在的硬件设备,这样的吞吐显得过于“低调”,可通过提高autovacuum_vacuum_cost_limit来提升总体吞吐,比如把autovacuum_vacuum_cost_limit设置为2000,可以让上述吞吐量有10x的提升。“PostgreSQL中与AUTOVACUUM IO相关的参数是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云网站,小编将为大家输出更多高质量的实用文章!

相关推荐: Sqlcl连接Oracle DataBase 19c的方法

这篇文章主要介绍“Sqlcl连接Oracle DataBase 19c的方法”,在日常操作中,相信很多人在Sqlcl连接Oracle DataBase 19c的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Sqlcl连接Or…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/07 22:07
下一篇 01/07 22:07