暂无图片
分享
彭冲
2020-01-08
表不能手工清理回收死元组应用如何分析处理?

生产环境发现应用系统使用一段时间之后访问数据库比较慢,响应超过分钟级。初步发现调用的几个表占用空间很大,但却不能手工清理掉空间,只能重启解决。但问题依然会复现!

发现问答区都是oracle,提个PG问题- -

收藏
分享
5条回答
默认
最新
彭冲

查询pg_stat_activity发现有个查询语句的状态值为idle in in transaction,后得知原来应用程序每隔固定时间查询一次表,查询手动开启了事务但没有提交。

当前只要存在未提交的事务,表的清理自然不能成功,虽然没能通过不成功的详细信息得到答案。

9.6之后增加了一个空闲事务超时参数的设置,可以避免这个问题。

暂无图片 评论
暂无图片 有用 0
打赏 0
llzx373

另外一个办法,是定时扫描超过一定时长的事务后发出报警,这个应该需要作为一个报警项目单独设置

暂无图片 评论
暂无图片 有用 0
打赏 0
joan

old_snapshot_threshold可以防止数据库过度膨胀,但是业务操作完后建议及时提交事务;idle_in_transaction_session_timeout设置空闲事务超时时间也可以。

暂无图片 评论
暂无图片 有用 0
打赏 0
彭冲

9.6开始参数idle_in_transaction_session_timeout是可以

暂无图片 评论
暂无图片 有用 0
打赏 0
彭冲
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏