PostgreSQL中如何监控VACUUM的处理过程


这篇文章主要讲解了“PostgreSQL中如何监控VACUUM的处理过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQL中如何监控VACUUM的处理过程”吧!PG的MVCC要求“过期”的数据不能马上被物理清除,而是标记为dead rows,这些dead rows后续会通过vacuuming过程清理。
vacuuming通过以下方式让数据库保持健康:
1.标记dead rows可用于存储新数据,这样可以避免不必要的磁盘浪费以及可以跳过dead rows以提升顺序扫描的性能;
2.更新vm(用于跟踪过期或已废弃的数据,反应在pages上)。这可以提升index-only scans的性能;
3.避免出现事务ID回卷失败
PG提供了autovacuum机制,通过周期性的运行ANALYZE来收集最近频繁更新的数据表统计信息。这一小节介绍了配置参数中与vacuum相关的参数,包括log_autovacuum_min_duration、autovacuum_naptime等。
log_autovacuum_min_duration
如autovacuum的执行时间超过了该参数配置的时间(ms为单位)则在日志中记录。
设置为较低的阈值:10ms执行SQL日志显示autovacuum的analyze操作autovacuum_naptime
该参数控制autovacuum的调度时间,如有多个数据库,则每个数据库每隔一定的时间(autovacuum_naptime/数据库个数)启动autovacuum来进行处理。
从PG的源码可见,通过函数rebuild_database_list来构建出现变化后的DatabaseList,链表中的数据库应出现在pgstats中,在autovacuum_naptime所设定的时间间隔范围内均匀分布。
比如autovacuum_naptime = 60s,有4个数据库db1->db4,那么每隔60s/4就会有启动一个autovacuum worker对相应的DB进行处理。
可能的一个处理时间序列是:db1->XX(时):XX(分):18(秒),db4->XX:XX:33,db4->XX:XX:48,db4->XX:XX:03
后续如需要对db1->db4进行vacuum,那么db1->db4会在下一个18秒、33秒、48免费云主机域名秒和03秒触发autovacuum。测试场景:创建3个数据库,db1 -> db3,每个数据库每隔10s执行全表更新,通过日志观察autovacuum的行为。对应的日志输出从日志可见,PG认为目前有4个数据库(60s/4)需要处理,每个15s调度一个数据库。感谢各位的阅读,以上就是“PostgreSQL中如何监控VACUUM的处理过程”的内容了,经过本文的学习后,相信大家对PostgreSQL中如何监控VACUUM的处理过程这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: redis除了做缓存还能够用来干什么

redisRedisNoSQLRedisRedis1select a from A limit 10redis LPUSHListkeymysqlListredis2redisrediszsetzset set ,valuerediszsetscore0sco…

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

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