当前位置: 首页 > news >正文

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.dtcms.com/a/338677.html

相关文章:

  • consul-基础概念
  • Leetcode 343. 整数拆分 动态规划
  • 【教程】在 VMware Windows 虚拟机中使用 WinPE 进行离线密码重置或取证操作
  • 通信急先锋,稳联技术Profinet与EtherCAT锂电行业应用案例
  • 2025年5月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(六)
  • AMPAK正基科技系列产品有哪些广泛应用于IOT物联网
  • Git的初步学习
  • GStreamer无线图传:树莓派到计算机的WiFi图传方案
  • 反向代理实现服务器联网
  • RNN(循环神经网络)和Transformer是处理自然语言处理(NLP)任务区别
  • 【深度学习新浪潮】如何利用多模态大模型优化结构力学性能?
  • 「内力探查术」:用 Instruments 勘破 SwiftUI 卡顿迷局
  • 开源 C++ QT Widget 开发(一)工程文件结构
  • linux系统装google chrome,amd64
  • Qt——文件操作
  • Vercel v0 iOS版重磅发布:AI驱动的移动开发新篇章
  • SWMM排水管网水力、水质建模及在海绵与水环境中的应用
  • 纯Qt结合ffmpeg实现本地摄像头采集/桌面采集/应用程序窗口采集/指定采集帧率和分辨率等
  • 数据仓库OLTPOLAP维度讲解
  • Qt事件处理机制详解
  • [激光原理与应用-308]:光学设计 - 266皮秒深紫外激光器设计图纸示例解析(基于工程实现与专利技术)
  • 《C++进阶之STL》【二叉搜索树】
  • 11.Ansible自动化之-内容集管理
  • 云原生俱乐部-shell知识点归纳(1)
  • MFC,C++,海康SDK,回调,轮询
  • 借助AI将infoNES移植到HarmonyOS平台的详细方案介绍
  • “道法术器” 思维:解析华为数字化转型
  • Springboot使用Selenium+ChormeDriver在服务器(Linux)端将网页保存为图片或PDF
  • 如何在未来进一步推动NLP技术的发展?
  • Java高级面试实战:Spring Boot微服务与Redis缓存整合案例解析