暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB 自治事务管理视图及不停库释放自治事务

原创 MogDB 2024-08-06
146

可获得性

本特性自MogDB 5.0.6版本开始引入。

特性简介

本特性支持查看自治事务活跃数量以及相关细节,同时支持不停库释放自治事务。

客户价值

增强自治事务的可观测性,便于观测系统自治事务会话细节以及与主事务会话的关系,方便用户控制系统运行的自治事务个数。

特性描述

在MogDB当前设计中,一个主事务在第一次收到处理自治事务命令后,会发起创建会话连接流程,也就是独立于主事务的自治事务会话,即使主事务里面后续执行多条自治事务命令,都是复用同一个会话连接。当主事务提交或者回滚的时候,关闭(销毁)自治事务会话连接。

本特性支持通过pg_running_xacts视图查看自治事务会话连接的数量以及具体细节,如果想要查询自治事务的具体SQL执行内容,可以根据此视图和其他已有视图(比如pg_stat_activity)构建新的视图。

当用户通过pg_running_xacts视图查询到自治事务连接数目过多的时候,可以使用 select pg_terminate_backend(pid) 命令强制杀死活跃的自治事务(自治事务的pid根据pg_running_xacts视图得到),此时系统中自治事务会话连接个数会减少。

视图说明

pg_running_xacts视图新增以下3列:

名称 类型 描述
sessionid bigint 会话 ID
parent_sessionid bigint 自治事务父会话 ID
is_autonomous_session bool 是否是自治事务会话

示例

-- 建表 Create table test_auto_dataa (a int); -- 建立自治事务存储过程 create or replace procedure taest_auto_pp() as PRAGMA AUTONOMOUS_TRANSACTION; begin insert into test_auto_dataa select generate_series(1,700000); commit; end; / Begin -- 主事务开始 taest_auto_pp(); -- 执行自治事务 insert into test_auto_dataa select generate_series(1,7000000); end / -- 在执行自治事务阶段(可以使用pg_stat_activity视图确定自治事务在运行),查询pg_running_xacts视图,可以查到自治事务的会话连接,sessionid对应的is_autonomous_session为t,parent_sessionid不为0。执行完自治事务之后,主事务未结束之前,自治事务的会话连接依然存在。注:开启线程池模式,自治事务结束之后,其sessionid和pid会被清零。执行完主事务之后(主事务提交或者回滚),自治事务的会话连接消失。 select * from pg_running_xacts; select * from pg_get_running_xacts(); -- 在执行自治事务阶段,通过上述视图查询到自治事务的线程id,并且记录下主会话的session id,然后使用pg_terminate_backend(pid)杀掉自治事务。 select pg_terminate_backend(pid);

相关页面

pg_running_xactspg_get_running_xacts()PG_STAT_ACTIVITYpg_terminate_backend(pid int)自治事务

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论