SinoDB数据库出现长事务的解决方法

2024-05-10 11:28

本文主要是介绍SinoDB数据库出现长事务的解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        SinoDB数据库出现长事务的具体现象:
  长事务会引发逻辑日志耗尽,导致数据库进入叫做“长事务阻塞Blocked:LONGTX”的状态中,数据库服务响应停止。这时候,数据库状态通过onstat – 命令通常有如下提示:

Sinoregal SinoDB Dynamic Server Version 16.8.FC8U0X3 – On-Line (LONGTX) – Up 3 days 23:33:53 – 164468 Kbytes

  当遇到长事务的情况,通常在online.log会发现有不同的长事务的告警信息,需要区分不同的长事务类型,从而采取不同的方法去处理。相应的,在online.log会有两种不同的关于“long transaction”的信息提示:
  第一种(不处理):
  在online.log中有如下信息提示:“Continuing Long Transaction (for COMMIT): tx:0xc0000000b28f5338 username: xxsp uid: xxx” 在这种情况下,事务使用逻辑日志的量已经超过了长事务高水位值(LTXHWM),但此时的事务本身已进入了“commit”或“roll back”阶段,此时数据库引擎将允许事务继续使用逻辑日志,而不会强行回滚该事物,所以上述类型的长事务不会阻塞数据库,并且系统会自动等待事务自行处理完毕。

  第二种:
  在online.log中有如下信息提示:“Aborting Long Transaction: tx:0xc0000000b8d20c18 username: xxsp uid: xxx” 这种情况的长事务已经超过了长事务高水位值(LTXHWM)并且没有自动进入到“commit”或“roll back”阶段,此时数据库会开始主动进行该长事务回滚。

  处理方案:
  1、收集逻辑日志信息:onstat –lr
  若逻辑日志使用率used%长久没有变化,则可能发生了长事务(也可能回滚写日志),再通过步骤2确定

  2、收集长事务地址address:$ onstat –x
  得到长事务带有R标识(回滚)的address信息

  3、将步骤2出现的address物理地址转换为用户线程会话信息,可以有很多方法,例如:
  onstat -u|grep 1cd55c618
  得到:
  1cd55c618 --RPX-- 1880841 xxsp - 0 0 642073 256446 323049

  4、根据步骤3找出长事务的SQL:onstat -g ses 1880841

  5、确认系统是否配置为逻辑日志自动增加 确认onconfig配置的参数DYNAMIC_LOGS=2
  onstat -g cfg | grep DYNAMIC_LOGS

  6、临时增加逻辑日志以利于继续回滚,可多次运行 onparams -a -d llogdbs -s 50000 –i
  (具体dbspace名称和大小以实际情况为准)

  7、长事务回滚是否结束 onstat -
  观察是否回到online状态

  8、回滚完成后的SQL优化:确认SQL是否为业务需要及合理与否,如有可能,拆分大事务为多笔小事务

  9、如有必要,回收步骤6增加的逻辑日志:onparams -d -l -y

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

这篇关于SinoDB数据库出现长事务的解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/976312

相关文章

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关