暂无图片
pg中snapshot too old,如何理解??
我来答
分享
暂无图片 匿名用户
pg中snapshot too old,如何理解??

snapshot too old 如何理解??

有没有相关的真实的操作实验来更好的理解和说明

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
szrsu
暂无图片

pg中是通过vacuum回收脏数据,也就是我们常说的dead tuple。但是有时候长事物会持有一些dead tuple很长时间,这样就不能及时做vacuum回收脏数据。这样就使得数据库中的表很容易膨胀,并占用额外的存储空间。从而还会导致相关SQL操作性能下降。所以为了避免以上结果,从9.6引入了old_snapshot_threshold参数。

当old_snapshot_threshold默认值为-1,是关闭的。当我们设置该值为具体时间的时候,vacuum 就不会等待长时间的查询结束,会继续对dead tuple进行处理,如果刚好有事物正好在使用这些dead tuple,那么就会报错snapshot too old。

PostgreSQL14版本中添加一个插件,可以在old_snapshot_threshold关闭的时候(设置为-1),查看映射的XID。

可以参考这个 https://postgreshelp.com/postgresql-14-snapshot-too-old/

暂无图片 评论
暂无图片 有用 0
2022-11-29
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏