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




