GaussDB 并发自治事务数达到最大值处理案例

1 业务背景

自治事务(Autonomous Transactions)是一种高级特性,允许你在一个事务中执行另一个独立的事务。这种机制特别有用,尤其是在需要在一个事务中执行多个操作但又不想因为其中一个操作失败而影响整个事务的场景。

2 业务影响

在业务触发情况下,自治事务数会达到瓶劲,GaussDB默认为10个。

如:

3 处理方法

将max_concurrent_autonomous_transaction值按照应用开启的并发数设置,比较开启16个并发,那么这个参数要比这个值大,建议值20~30左右。

默认值:

gaussdb=>
gaussdb=>
gaussdb=> show max_concurrent_autonomous_transactions;max_concurrent_autonomous_transactions
----------------------------------------10
(1 row)gaussdb=>

如将max_concurrent_autonomous_transactions值改为20

gs_guc set -Z datanode -I all -N all -c "max_concurrent_autonomous_transactions='20'";
The gs_guc run with the following arguments: [gs_guc -Z datanode -I all -N all -c max_concurrent_autonomous_transactions=10 set ].
Begin to perform the total nodes: 3.
Popen count is 3, Popen success count is 3, Popen failure count is 0.
Begin to perform gs_guc for datanodes.
Command count is 3, Command success count is 3, Command failure count is 0.
Total instances: 3. Failed instances: 0.
ALL: Success to perform gs_guc![Ruby@dtest1 ~]$ cm_ctl stop && cm_ctl start
gaussdb=>  show max_concurrent_autonomous_transactions;max_concurrent_autonomous_transactions
----------------------------------------20
(1 row)

注: max_concurrent_autonomous_transactions参数的修改需要重启服务。

4 普及自治事务

针对这个问题一起普及自治事务知识点:

1)自治事务用法:

PRAGMA AUTONOMOUS_TRANSACTION,以改标识符表明该存储过程里面包含有自治事务。且必须放在声明部分,即“begin”前面

2)与oracle主要区别

在存储过程中,GaussDB的自治事务“递交”动作 commit无需显式指定,“回退”动作rollback 则需要指定,但在oracle数据库,自治事务递交与回退操作都需要显式指定。GaussDB数据库自治事务支持以下场景:存储过程,函数,匿名块,不支持在触发器中使用。oracle数据库,自治事务支持存储过程,函数,匿名块,以及触发器。

例:以下是显式加了rollback回退,如果不加commit情况下,默认提交。

csdn=> create or replace procedure autonomous_4(a int, b int) as
csdn$> declare
csdn$> num3 int :=a;
csdn$> num4 int :=b;>
csdn$> PRAGMA AUTONOMOUS_TRANSACTION;
csdn$> BEGIN
csdn$> INSERT INTO t2 values(num3,num4);
csdn$> rollback;
csdn$> dbe_output.print_line('just use call.');
csdn$> end;
csdn$> /
CREATE PROCEDURE
csdn=>  call autonomous_4(300,700);
just use call.autonomous_4
--------------(1 row)csdn=> select * from t2;a  |  b
-----+-----1 |   2200 | 500
(2 rows)

5 自治事务约束

  • 自治事务执行时,将会在后台启动自治事务session,可以通过max_concurrent_autonomous_transactions设置自治事务执行的最大并行数量,取值范围:0~10000,默认值:10。
  • 当max_concurrent_autonomous_transactions参数设置为0时,自治事务将无法执行。
  • 自治事务新启session后,将使用默认session参数,不共享主session下对象(包括session级别变量、本地临时变量、全局临时表的数据等)。
  • 自治事务理论上限为10000,实际上限为动态值,参考GUC参数max_concurrent_autonomous_transactions描述。
  • 自治事务受通信缓冲区影响,返回给客户端的信息大小受限于通信缓冲区长度,超过通信缓冲区长度时报错。
  • 自治事务执行期间,主事务会给自治事务加锁,异常情况导致此锁残留的场景下,需要依赖gs_clean清理残留锁,清理周期由GUC参数 gs_clean_timeout控制,默认值为60秒。自治事务的锁不受lock timeout影响,锁超时时间为2147483s,自治事务执行超过此时间会报错锁超时。
  • 自治事务设置建立连接超时时间5s,建立连接尝试5次。建立连接期间不立即响应信号,每次建立连接前检查信号。高并发、高CPU、高内存,以及线程池扩容场景下可能存在超时报错现象。
  • 在PACKAGE SPECIFICATION或PACKAGE BODY SPECIFICATION中声明自治事务PRAGMA AUTONOMOUS_TRANSACTION语法,可成功创建PACKAGE,但自治事务不生效。
  • 触发器函数不支持自治事务。

6 批注

自治事务也有优点:1.隔离性:自治事务允许你在一个事务中处理多个操作,这些操作可以独立地成功或失败,互不影响。2.灵活性:适用于复杂的业务逻辑,其中某些操作的成功或失败不应影响其他操作。3.在某些情况下,可以减少锁的竞争,提高并发性能。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94224.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【传奇开心果系列】Flet分页自定义组件CustomPaginationComponent封装版自定义模板

Flet分页自定义组件CustomPaginationComponent封装版自定义模板一、效果展示GIF动图二、应用场景三、特色说明四、源码下载地址一、效果展示GIF动图 二、应用场景 图片浏览应用: 用户可以通过分页组件浏览多张图片,每点击一次“上一页”或“下一页”按钮…

数据安全——39页解读数字化转型大数据安全基础培训方案【附全文阅读】

适应人群为企业数据安全管理人员、IT 运维人员、数字化转型决策者、网络安全工程师及关注大数据安全的从业人员。主要内容围绕数字化转型中大数据安全展开,核心包括基础概念(信息、数据与大数据的定义及区别,大数据 4V 特点与来源);安全风险(企业面临的数据资产管理缺失、…

week3-[二维数组]小方块

week3-[二维数组]小方块 题目描述 如果四个数 a,b,c,da,b,c,da,b,c,d 可以分成两组,每组两个数,满足每组里面的两个数一样,那么称这四个数是好的。 比如,2,5,2,52,5,2,52,5,2,5 是好的,因它满足两组:222 与…

Swift 项目结构详解:构建可维护的大型应用

Swift 项目结构详解:构建可维护的大型应用一、基础结构(推荐新手使用)二、组件化结构(企业级应用推荐)层级架构:MVVM Coordinator路由实现(Coordinator模式)三、通用组件实现DI&…

【实时Linux实战系列】基于实时Linux的数字转换器设计

在现代电子系统中,数字转换器(如模数转换器ADC和数模转换器DAC)扮演着至关重要的角色。它们负责将模拟信号转换为数字信号,或将数字信号转换为模拟信号,从而实现信号的数字化处理和传输。在实时系统中,如工…

FastTracker:实时准确的视觉跟踪

摘要 https://arxiv.org/pdf/2508.14370 传统的多目标跟踪(MOT)系统主要设计用于行人跟踪,通常对其他物体类别的泛化能力有限。本文提出了一种能够处理多种物体类型的通用跟踪框架,特别强调在复杂交通场景中的车辆跟踪。所提出的1方法包含两个关键组件&a…

国产轻量级桌面GIS软件Snaplayers从入门到精通(20)

国产轻量级桌面GIS软件Snaplayers实操:打开图层并显示属性信息1、根据数据格式选择图层文件2、加载图层到地图中,并在左侧显示图层的属性表格3、属性表格分页显示Snaplayers研发团队承诺:国产轻量级桌面GIS软件Snaplayers永久免费并持续更新

快速入门flask应用(从入门到实战)

目录 前言: 了解一些网络通信的概念 什么是网络通信: 当我们访问一个网址的时候发生了什么: 1. 解析 URL:明确访问目标 2. DNS 域名解析:将 “名字” 转为 “地址” 3. 建立连接:TCP 三次握手&#x…

C++/QT 开发技能树详解

一、 编程语言 (C)1. C基础语法(数据类型、模板、命名空间)是什么: 这是构建C程序的基石。数据类型定义了变量存储的数据种类和大小;模板允许编写与数据类型无关的通用代码;命名空间用于避免大型项目中的名称冲突。如何…

Java多线程进阶-死锁与面试题解析

文章目录Java多线程进阶:死锁与面试题解析一、并发编程的噩梦——死锁1. 什么是死锁?四个缺一不可的条件2. 如何避免死锁?从破坏循环等待开始二、并发编程面试题全景解析1. 锁与同步机制2. CAS 与原子操作3. JUC 工具与线程池4. 线程安全集合…

ZYNQ启动流程——ZYNQ学习笔记11

ZYNQ SoC 的启动由片上的 BootROM 开始。片上 BootROM 是 ZYNQ 芯片上的一块非易失性存储器,它包含了 ZYNQ 所支持的配置器件的驱动, 而且里面的代码是不可修改的。 BootROM 中的代码首先会在片外的非易失性存储器中寻找一个头文件, 头文件里…

C++利用CerateProcess创建WPF进程并通过命名管道通讯

引言原因是我需要在C程序中调用另外一个WPF窗体打开或则关闭,进程之前通过通讯协议进行交互。由于使用不同语言开发,两者都比较复杂不方便重写,最方便的方法就是使用进程间通信,WPF窗体应用程序根据消息进行Show/Hide/Exit操作。函…

Seaborn数据可视化实战

1. Seaborn基础与实践:数据可视化的艺术 2. Seaborn入门:环境搭建与基础操作 3. Seaborn基础图表绘制入门 4. Seaborn数据可视化基础:从内置数据集到外部数据集的应用 5. Seaborn颜色与样式定制教程 6. Seaborn数据可视化入门:绘制…

BIM+写实数字孪生落地实战指南

🌟 正文 在智慧城市与工业4.0的浪潮中,BIM与数字孪生的深度碰撞正在重塑建筑的生命周期。基于Revit(RVT)模型构建的超写实数字孪生体,不仅实现物理空间的毫米级镜像,更通过实时数据驱动,赋予建…

[Git] 如何拉取 GitHub 仓库的特定子目录

作为开发者,我们经常遇到只需要克隆大型仓库中某个子目录的场景。 Git 本身并不支持直接克隆子目录,但通过一些技巧可以实现类似效果。本文将介绍几种实用的方法,帮助获取目标代码。 为什么需要局部拉取? 节省时间和带宽&#xff…

修复Simulink到UE5丢包时被控船体的残影问题

提问 simulink 有一个和UE5协同的模块,叫做Simulation 3D Scence Configuration,还有一个发送来自simulink到UE5数据的模块叫做Simulation 3D Message。 现在遇到的问题是,这两个模块的优先级设置是正确的,且sample time都设置为0…

嵌入式第三十五课!!Linux下的网络编程

一、目的网络编程的目的实际上也是进程通信的一种方式,不过它可以在不同的主机上进行通信;二、需要解决的问题1. 主机与主机之间物理层面必须互联互通。指的是参与通信的计算机(主机)需要通过物理设备建立连接(光纤、网…

遥感机器学习入门实战教程|Sklearn案例⑦:特征选择与重要性分析

很多同学问:波段/特征一多就“维度灾难”,训练慢、过拟合,且很难解释“哪些特征最关键”。本篇用 sklearn 给出一套能跑、可视化、可比较的最小工作流,并配上方法论速记,帮助你在高光谱/多特征任务里做出稳健筛选。 &a…

地理数据制备:蔚蓝地图空气质量数据的获取、清洗与坐标匹配指南

【📊】手把手攻略:如何从“蔚蓝地图”挖宝——获取济南市可用空气质量数据全记录 一份不需要写代码也能搞定环境数据获取的实用指南 ✨ 引言:为什么选择蔚蓝地图? 作为一名环境数据爱好者,我经常需要获取准确、可靠、…

Unreal Engine USceneComponent

Unreal🏛 Unreal Engine - USceneComponent📚 定义🏷 类继承⚡ 关键特性⚙️ 常见配置🛠️ 使用方法🔗 创建与挂载🔄 获取与修改 Transform🧩 附加/分离组件🏊 典型应用场景&#x1…