温馨提示×

温馨提示×

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

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

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

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

本篇内容介绍了“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。

IO相关参数

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_vacuum_cost_limit = -1 ### 如为-1,则默认为vacuum_cost_limit,即200
autovacuum_vacuum_cost_delay = 20ms
vacuum_cost_page_hit = 1
vacuum_cost_page_miss = 10
vacuum_cost_page_dirty = 20

autovacuum的IO指标

根据上述参数,下面我们来推算下每秒autovacuum会产生的IO。
autovacuum_vacuum_cost_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相关的参数是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

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

AI