主机update时,会触发页面的整理操作,产生XLOG2_CLEAN操作记录,这个操作和备机的查询长事务相互冲突,导致备机查询失败
清理代码: heap_page_prune_opt
查阅社区,社区上有一个帖子,讨论关闭autovacuum后,反复update,再插入,结果膨胀比例不是成倍增加的情况
https://www.postgresql-archive.org/insert-update-performance-td5883748.html#a5884440
这个清理操作可能不是vacuum产生的,而是由update产生的,理论上查询也有可能会触发(今天遇到一个大量删除某个表中元组后,关联该表查询语句引发IO,导致系统IO突然升高,怀疑和这个类似)
这个堆栈是帖子上的,查询引起清理。我遇到的情况是,反复删除后,磁盘IO突然冲高,解析了下xlog,全部是这种清理操作记录,并且查询语句都在等待IO,内核函数显示是在io上
这个意思是如果页面上有pd_prune_xid,并且pd_prune_xid
反复update会触发这个清理,导致备机查询冲突。
从日志看最后都是在做清理,但是之前做的操作一直是删除,突然触发感觉好诡异。不过现象,是系统IO满了,所有select查询语句都处于等待io状态
应该是autovacuum清理吧,另外生产环境不建议关闭autovacuum,关了会引起表和索引的膨胀
我前面自己测试了下确实是会清理,这个清理功能是为了hot做的,vacuum成本太高,而且会清理索引,heap_page_prune_opt就是为了清理几个页面做的,是启发式触发的,如果访问这个页面,页面头信息中有pg_prune_xid,并且页面的空闲空间小于fillfactor,可以获得buffer cleanup lock时就会触发这个清理操作,不过这个应该不会引起大量的io,因为这个就是对单个页面进行整理,具体你可以看下/src/backend/access/heap/README.HOT的When can/should we prune or defragment
问题答疑来自云栖社区-技术进阶[钉钉群],喜爱PostgresSQL的同学扫码进群
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。