首页 > 数据库 >openGauss学习笔记-90 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用重试中止事务

openGauss学习笔记-90 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用重试中止事务

时间:2023-10-05 12:32:37浏览次数:36  
标签:事务 stmt MOT 内存 使用 openGauss se

openGauss学习笔记-90 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用重试中止事务

在乐观并发控制(OCC)中,在COMMIT阶段前的事务期间(使用任何隔离级别)不会对记录进行锁定。这是一个能显著提高性能的强大优势。它的缺点是,如果另一个会话尝试更新相同的记录,则更新可能会失败。所以必须中止整个事务。这些所谓的更新冲突是由MOT在提交时通过版本检查机制检测到的。

img 说明: 使用悲观并发控制的引擎,如标准Postgres和openGauss基于磁盘的表,当使用SERIALIZABLE或REPEATABLE-READ隔离级别时,也会发生类似的异常中止。

这种更新冲突在常见的OLTP场景中非常少见,在使用MOT时尤其少见。但是,由于仍有可能发生这种情况,开发人员应该考虑使用事务重试代码来解决此问题。

下面以多个会话同时尝试更新同一个表为例,说明如何重试表命令。有关更多详细信息,请参阅“OCC与2PL的区别举例”部分。下面以TPC-C支付事务为例。

int commitAborts = 0; 

while (commitAborts < RETRY_LIMIT) { 

    try {                         
        stmt =db.stmtPaymentUpdateDistrict; 
        stmt.setDouble(1, 100); 
        stmt.setInt(2, 1); 
        stmt.setInt(3, 1); 
        stmt.executeUpdate(); 

        db.commit();                      

        break; 
    }               
    catch (SQLException se) { 
        if(se != null && se.getMessage().contains("could not serialize access due to concurrent update")) { 
            log.error("commmit abort = " + se.getMessage()); 
            commitAborts++; 
            continue; 
        }else { 
            db.rollback(); 
        } 

        break; 
    } 
}

标签:事务,stmt,MOT,内存,使用,openGauss,se
From: https://blog.51cto.com/shuchaoyang/7711647

相关文章

  • "堆"(Heap)和"栈"(Stack)两个重要的内存管理概念
    在Delphi和其他编程语言中,"堆"(Heap)和"栈"(Stack)是两个重要的内存管理概念,用于存储和管理程序中的数据和变量。它们有不同的特性和用途:堆(Heap):堆是一块动态分配的内存区域,用于存储对象、数据结构和变量。堆内存的分配和释放是由程序员手动控制的,通常使用New和Dispose(或GetMem和......
  • 10.3 调试事件转存进程内存
    我们继续延申调试事件的话题,实现进程转存功能,进程转储功能是指通过调试API使获得了目标进程控制权的进程,将目标进程的内存中的数据完整地转存到本地磁盘上,对于加壳软件,通常会通过加密、压缩等手段来保护其代码和数据,使其不易被分析。在这种情况下,通过进程转储功能,可以将加壳程序的......
  • FreeRTOS 原理 --- heap 堆内存的使用
    FreeRTOS一共提供了5种申请内存的方案heap1只申请不释放,内存利用率最高。申请出来的内存块,没有内存块头记录这个内存的大小,所以也无法释放,也正是没有内存块头,内存利用率高使用场景:不需要频繁申请内存heap2能申请能释放,不能合并内存块。每个内存块都有一个内存块头,有一个链表......
  • 苹果电脑磁盘满了怎么清理内存
    如果你是Mac用户,可能会面临一个常见但又令人头疼的问题——磁盘空间不足。这不仅影响了你的电脑性能,还可能导致新的软件无法安装,甚至影响到文件的保存。好消息是,有多种方法可以有效地解决这个问题。下面就一起来看看吧!一、手动清理清空垃圾箱你可能会觉得这很基础,但清空垃圾箱实际......
  • Java之对象内存分析
    相信大家有时候在读代码的时候应该都会有以下情况:这个对象本定义在上面,乱跑什么?怎么又到下面去了?欸?我明明改变了这个对象的值,怎么没变呢?要想搞清楚某一对象在程序中是怎样活蹦乱跳的,首先我们要对其内存的状况要有些了解。在java中,类是属于引用数据类型,而引用数据类型最大的......
  • 达梦数据库使用内存监控指导
    达梦数据库使用内存监控指导2.1如何判断内存池空闲还是紧张v$mem_pool可以查看所有内存池的使用信息。当前系统的内存池总大小可以通过以下语句查询,单位是M:selectname,--内存池名称is_shared,--是否是共享的is_overflow,--是否用到了备份池org_size/1024.0/1024.0,--......
  • VMWare 虚拟机 CPU 设置里针对 CPU 的虚拟化 IOMMU(IO 内存管理单元) 选项功能介绍
    虚拟化技术在现代计算中扮演着关键角色,使多个虚拟机(VM)能够在单个物理主机上同时运行。VMware作为虚拟化技术的领导者之一,提供了许多高级设置选项,其中之一是“虚拟化IOMMU(IO内存管理单元)(I)”选项。在本文中,我将详细介绍这个选项的作用,并提供示例来说明其实际应用。1.虚拟化......
  • 1449元起 美商海盗船统治者泰坦DDR5内存上架:6000-7200MHz可选
    美商海盗船(Corsair)推出了统治者泰坦DDR5内存,频率可选6000-7200MHz,首发1449元起。据介绍,统治者泰坦DDR5内存有着简洁、优雅的造型,采用了锻造铝结构,并得到美商海盗船荣获专利的DHX散热技术的支持,提升了超频潜力。同时,内存顶部的LED灯条有着11颗可单独寻址的RGBLED灯,通过iCUEMur......
  • Linux 内存泄漏检测的基本原理
    一、mtrace分析内存泄露mtrace(memorytrace),是GNUGlibc自带的内存问题检测工具,它可以用来协助定位内存泄露问题。它的实现源码在glibc源码的malloc目录下,其基本设计原理为设计一个函数voidmtrace(),函数对libc库中的malloc/free等函数的调用进行追踪,由此来检测内存是否存在......
  • C++类内存分布+ Studio工具
    书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好VisualStudio工具,像下面这样一步一步来:  先选择左侧的C/C++->命令行,然后在其他选项这里写上......