2pc残留类问题 本页介绍天翼云TeleDB数据库2pc残留类问题。 2pc残留问题问题 问题描述 2pc为两阶段提交,正常运行也会有两阶段提交事务,大量分布式事务并行执行,可能会造成2pc事务堆积,数据库响应变慢等问题;而操作系统故障、实例节点异常重启等都可能会造成2pc事务残留,2pc残留会导致访问到该事务相关的SQL卡住,一直处理等待状态,影响业务运行,因此当有2pc残留时须尽快清理,正常情况Center可以定时发起2pc残留事务清理动作,当遇到一些异常情况时,2pc残留任务未发起或清理失败,会导致2pc残留下来,进一步阻塞相关SQL执行。 可能影响 可能会导致部分SQL执行一直处理等待状态,通过pgblockingpids(pid)返回pid为0,则表示事务被2pc两阶段事务阻塞; 可能会导致节点启动失败。 解决步骤 1. 2pc是在每个CN主节点上各自管理,需要在每个CN主节点上执行 2. 执行2pc残留检查SQL: select pgcleanchecktxn(); 返回结果如: pgcleanchecktxn ($XC$1017222:cn001:F:2:0,test,TXNSTATUSABORTED,"cn001 :TXNSTATUSINITIAL+ cn002 :TXNSTATUSINITIAL + dn001 :TXNSTATUSPREPARED + dn002 :TXNSTATUSPREPARED") ($XC$1017223:cn001:F:2:0,test,TXNSTATUSABORTED," cn001 :TXNSTATUSINITIAL+ cn002 :TXNSTATUSINITIAL + dn001 :TXNSTATUSPREPARED + dn002 :TXNSTATUSPREPARED") (2 rows) 3. 在检查有2pc残留的CN节点上清理SQL: > select pgcleanchecktxn(); 4. 上述这方法通常可以清理掉2pc残留,还有可能在清理时提示pgxact或pgcommitts文件失败的问题,可参考文档补全缺失文件后再执行2pc清理SQL。