长事务的理解和预防

        我们常常听说数据库发生了“长事务”而导致很严重的后果。那么何为长事务?长事务是如何产生的?长事务对数据库有什么影响?如何防止长事务的产生?以下对这几方面进行阐述和说明,以加深对SinoDB长事务的理解。

1.什么是长事务

  长事务,顾名思义就是一个事务(transaction)执行了很长时间仍未结束。那么一个事务执行多长时间算是长事务?对于SinoDB数据库来说占用逻辑日志个数的百分比达到长事务高水位线就被定义为一个长事务。

2.事务的控制

  事务的开始和结束,以“begin”为开始,以“commit”或“rollback”结束。“commit”表明事务执行成功,对数据库所做的修改已经生效,“rollback”则说明事务执行失败,对数据库的所有操作均需要撤销,恢复到事务执行之前的状态。为了使事务能被撤销,数据库也必须对所有操作及被修改前的数据进行日志记录,以便撤销时能够执行逆向操作,将数据恢复到以前的状态。

3.对日志的使用和影响

  为了防止数据库因日志资源耗尽发生阻塞,SinoDB设置了长事务高水位线(LTXHWM)和独占的长事务高水位线(LTXEHWM),当一个事务占用日志个数的百分比达到长事务高水位线LTXHWM就被标识为一个长事务,并自动触发回滚操作,当百分比达到独占的长事务高水位线时,其它会话均进入阻塞状态,只进行长事务回滚操作。

4.长事务产生的几种原因

  在SinoDB数据库中,长事务现象发生的原因主要有:

1) 逻辑日志参数设置不合理,日志个数太少或长事务高水位线LTXHWM太低;

2) 数据库并发很高,事务的粒度太粗,长时间不能提交,最终触及长事务高水位线;

3) 事务启动后,未使用commit或rollback来终止事务;

4) 大表连接插入目标表,连接条件不正确产生笛卡尔集,结果集超出预期,长时间不能处理完成;

5) 使用临时表装载大量数据,未指定with no log子句,也未设置TEMPTAB_NOLOG参数。

5.如何避免长事务

  长事务带来的后果是严重的,虽然在长事务发生时可以通过手工添加逻辑日志方式来挽救,但是及时性难以保证。不过长事务也是可以避免的,具体可以从以下几点做起:

1) 根据并发用户数和业务量合理设置逻辑日志大小和个数,保证大部分事务能正常完成;

2) 适当调低长事务高水位线LTXHWM,确保在长事务发生时有足够的日志文件用于回滚;

3) 设置参数DYNAMIC_LOGS为2,当无可用日志文件时会自动增加,需要注意的是日志并不是在事务到达LTXHWM之后就开始增加;

4) 合理控制事务的颗粒度,将大事务分割为小事务进行多次提交批量处理,减少单个事务处理时间,提高逻辑日志资源利用率;

5) 事务操作闭环,事务开始之后必须结束,尽量避免回滚,减少对日志和锁的消耗;

6) 大表进行连接时,尽量保证连接条件唯一,避免产生笛卡尔集,避免产生事务日志;

7) 在创建临时表应加上with no log字句,或将数据库参数TEMPTAB_NOLOG指定为1。

更多信息内容请移步星瑞格官方社区,期待大家加入
Sinoregal Tech ForumAsk questions, share solutions, and get to know the Sinoregal community.icon-default.png?t=N7T8https://forum.sinoregal.cn/

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

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

相关文章

Oracle 流stream将删除的数据保存

Oracle 流stream将删除的数据保存 --实验的目的是捕获hr.employees表的删除行,将删除行插入到emp_del表中。 --设置初始化参数 AQ_TM_PROCESSES1 COMPATIBLE9.2.0 LOG_PARALLELISM1 --查看数据库的名称,我的为ora9,将以下的ora9全部替换为你的数据库名称…

怎么给视频加水印?2招轻松搞定

在数字媒体时代,视频水印作为一种有效的版权保护手段,被广泛应用于各种场景。给视频添加水印不仅可以防止内容被恶意盗用,还能增加视频的辨识度,提升品牌形象。本文将为您介绍2种简单易行的方法,教您怎么给视频加水印&…

Cartographer前后端梳理

0. 简介 最近在研究整个SLAM框架的改进处,想着能不能从Cartographer中找到一些亮点可以用于参考。所以这一篇博客希望能够梳理好Cartographer前后端优化,并从中得到一些启发。carto整体是graph-based框架,前端是scan-map匹配,后端…

SpringBoot 3.2.5 + ElasticSearch 8.12.0 - SpringData 开发指南

目录 一、SpringData ElasticSearch 1.1、环境配置 1.2、创建实体类 1.3、ElasticSearchTemplate 的使用 1.3.1、创建索引库,设置映射 1.3.2、创建索引映射注意事项 1.3.3、简单的 CRUD 1.3.4、三种构建搜索条件的方式 1.3.5、NativeQuery 搜索实战 1.3.6…

鸿蒙开发之跨设备文件访问

分布式文件系统为应用提供了跨设备文件访问的能力,开发者在多个设备安装同一应用时,通过基础文件接口,可跨设备读写其他设备该应用分布式文件路径(/data/storage/el2/distributedfiles/)下的文件。 例如:多…

一文读懂通用漏洞评分系统CVSS4.0:顺带理清CVE、CWE及其与CVSS之间的关系

事件响应和安全团队论坛 (FIRST,Forum of Incident Response and Security Teams) 于 2023 年 11 月 1 日正式推出第四版通用漏洞评分系统 (CVSS 4.0,Common Vulnerability Scoring System version 4.0)。CVSS 4.0 是评估计算机系统安全漏洞严重性的行业…

申请免费的必应搜索API

申请免费的必应搜索API 文章目录 申请免费的必应搜索API前言一、原理1.1 登录1.2 进入1.3 获取密钥1.4 申请VISA信用卡1.5 创建必应自定义搜索资源 二、创建成功 前言 准备条件: 1、outlook邮箱 2、招商银行全币种VISA信用卡【建议之前就有一张招商银行信用卡&…

服务器通的远程桌面连接不上,关于服务器通畅但远程桌面连接不上问题的专业分析

在日常的企业IT管理中,服务器远程桌面连接是一个重要的操作功能。然而,有时会出现服务器网络通畅,但远程桌面无法连接的情况。 问题分析 1. 防火墙或安全组设置问题:服务器的防火墙或安全组可能阻止了远程桌面连接的端口&#xf…

QCC30xx 开发板如何测试待机电流

高通的通用蓝牙开发板底CF376上,有各种各样的外围电路与芯片,组成一整套完整的开发板平台,但客户通常只关心其中蓝牙芯片的各个状态下的工作电流,本文就介绍如何在CF376底板上,通过断开其它非必要电路 ,去测…

LeetCode2215找出两数组的不同

题目描述 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中:answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整数组…

Linux的进程间通信 管道 进程池

目录 前言 进程间通信的基本概念 管道 匿名管道 pipe函数 cfc 管道的四种情况 管道的五种特征 进程池 ProcessPool.cpp: Task.cpp: 前言 ubuntu系统的默认用户名不为root的解决方案(但是不建议):轻量应用服…

linux 网络管理 实验

目录 网络管理主机名管理网络管理 网络管理 主机名管理 执行如下命令查看主机名。 [rootopenEuler ~]# hostname openEuler [rootopenEuler ~]# cat /etc/hostname #这个文件是主机名的配置文件 openEuler执行如下命令临时修改主机名。 [rootopenEuler ~]# hostname huawe…