悬挂事务与长事务是什么?如何排查?

本文主要介绍什么是悬挂事务与长事务,并介绍排查方法。

概念

① 悬挂事务是指客户端与 OBProxy 之间已经断开,但 OBProxy 与数据库端的链接仍然存在,由于事务超时时间比较长,连接上的长时间存在的事务。

② 长事务是指链路连接正常,事务执行时间比较长的事务。

排查方法

可以通过以下命令查询是否存在悬挂事务与长事务,其中

now() - ctx_create_time > 1000

表示创建后执行时间大于 10 分钟的事务。

obclient> SELECT * FROM __all_virtual_trans_stat WHERE (now() - ctx_create_time) > 1000;

任何活跃事务都会持有 MemTable 的 reference,如果事务长时间不结束,则会使 MemStore 冻结后无法释放,最终导致内存不足。目前,OCP 的各个版本均支持对悬挂事务和长事务进行监控,一旦报警,需要去确认报警原因,并及时排除风险。有关使用 OCP 监控长事务与悬挂事务的方法,请参见《OCP 告警参考》。

可以通过配置

ob_query_timeout

ob_trx_timeout

配置项,避免事务长时间不结束,影响系统稳定性。有关以上两个配置项的详细信息与配置方式,请参见 影响 OceanBase 数据库连接超时的相关配置