文档中心MogDBMogDB StackUqbar
v5.0

文档:v5.0

支持的版本:

其他版本:

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

可获得性

本特性自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)自治事务

Copyright © 2011-2024 www.enmotech.com All rights reserved.