长事务、长时间未结束的SQL,对数据库危害极大,会导致表膨胀严重,垃圾回收不成功,XID回收异常,甚至会让XID耗尽而导致数据库进入只读状态。
特别注意:长事务会导致VACUUM FULL也没有办法回收空间,即使长事务的表和VACUUM FULL的表没有关系。
应定期检查并清理长事务、长时间未结束的SQL:
连接所有CN、DN主节点,执行以下SQL,查询超过1小时的会话:
select pid,client_addr,state_change,query_start,state_change,EXTRACT(EPOCH FROM (now()-query_start)),query,state,usename,application_name from pg_stat_activity where EXTRACT(EPOCH FROM (now()-query_start))> 3600 and state!='idle';