长事务的危害以及如何溯源长事务
长事务的危害以及如何溯源长事务
收藏
复制链接
微信扫码分享
在小程序上查看
分享
2条回答
默认
最新
长事务的危害
小事务但长期不提交:
如果前面执行过DML语句,会锁定相关数据,阻塞后面语句
阻塞create index(也包括 concurrently)
大量死元组无法vacuum,导致表膨胀
大量事务id无法冻结
WAL无法及时清理,占用空间大
占用连接数
开启old_snapshot_threshold后,长事务可能导致索引失效
搭配子事务容易使性能急剧下降
逻辑复制下会阻塞复制槽的创建
大事务:除上面外可能还有
出现较大范围锁表
WAL大量增加
主从出现延迟
溯源
什么样的事务才会是有危害的长事务?
pg_stat_activity视图中 backend_xid或backend_xmin字段非空的事务。单纯begin tran; 不提交并不会有问题,因为它并没有真正申请事务id和获取快照。
backend_xid:已申请的事务号(virtualxid不算),从申请事务号开始持续到事务结束。
backend_xmin:进程快照xmin,表示在快照创建时最旧的未提交事务id(实际上就是Transaction Horizon)
因此监控语句需要加上这两个条件
select count(*) from pg_stat_activity where state <> 'idle'
and (backend_xid is not null or backend_xmin is not null)
and now()-xact_start > interval '3600 sec'::interval
评论
有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

