【开发心得】一招减少msdtc时间3分钟,但还有未解之谜

news2025/1/10 1:41:01

最近解决了一个诡异的问题,MSDTC默认超时造成事务被取消,业务被迫中断,好在没有一直跟MSDTC耗着,而是通过其他方式解决了,但最后还是留下了两个未解之谜。对用到MSDTC处理SQL事务的朋友应该有借鉴作用,欢迎分享。

目录

故障现象

超时问题

一招解决

未解之谜


故障现象

之前已经碰到过关于MSDTC超时的问题,详见下面这篇文章。

【开发心得】(MS DTC)已取消此分布式事务解决方案之一

但这次碰到的不同,明明设置了超时20分钟,但是到了10分钟的时候,事务还是被取消了。下图是跟踪出来的错误提示,可以看到红框里的时间,正好都是10分钟左右,相差不超过30秒。

System.Transactions.TransactionException: The operation is not valid for the state of the transaction. ---> System.TimeoutException: Transaction Timeout --- End of inner exception stack trace ---

 System.Exception: Microsoft 分布式事务处理协调器(MS DTC)已取消此分布式事务。

超时问题

一开始,思路都是围绕着超时问题去解决的,结合之前的文章,下面的代码就是正常的配置。

也用chatGPT帮忙,结果最后发现,MSDTC默认的最长超时时间就是10分钟。chatGPT也提供了修改超时的方法,但是目前服务器上的版本并不支持,根本没有修改的地方,利用注册表修改也没用。

换服务器版本几乎不可能,动静太大,客户还在等着做业务。怎么办?

  <system.transactions>
    <defaultSettings timeout="00:20:00"/>
  </system.transactions>
        TimeSpan defaultTimeout = TransactionManager.DefaultTimeout;

        public DBScope(DBHelp dbHelp)
        {
            this.dbHelp = dbHelp;
            dbHelp.SetScope(this);
            this.transactionScope = new TransactionScope(TransactionScopeOption.Required, defaultTimeout);//超时取config文件
            Console.WriteLine("Scope create...");
        }

一招解决

经过1天的折腾,尝试了各种办法修改DTC的超时时间,结果都不行。不过这次心态挺好的,因为同时还要处理其他工作,一点儿都没有着急。

有时候,放松=成功。

经过一晚上充足睡眠,早上起来,想起来之前在本地测试的时候,这个事务处理的时间很短,服务器上怎么会慢呢?越想越不对劲,于是就想到了问chatGPT这样一个问题:

看红框部分,感觉有可能是个问题。之前数据不多,索引并没有全部加,想到了就做。

于是,经过一番折腾,终于把几个设计事务的表全部加上索引。经过测试,如下图,一下子缩短了3分钟!成功解决问题!

未解之谜

这是问题虽然解决了,但是还是留了两个未解之谜:

1、为什么DTC的默认超时10分钟无法调整?而且在当前的服务器版本里,始终无法找到对应的DTC的错误日志,怀疑应该是版本或者权限的问题,问过运维,这个版本很多地方都在用,只是大家都没用DTC服务。

2、为什么本地执行的时间反而比服务器上的时间更短呢?之前没有考虑索引,也是因为在本地PC环境里,这个事务只需要5分钟左右,配置差,为啥反而比服务器上更快呢?考虑可能是DTC在server和win7系统中的设置不同,但是具体是哪里的差异呢?

由于还有其他工作要处理,这两个未解之谜就留待将来有机会再解决,有碰到过的朋友,欢迎留言讨论,这个算不算工匠精神?

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

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

相关文章

uniapp滚动加载 下拉刷新

前言 在日常开发中&#xff0c;滚动加载和下拉刷新是非常常见的功能&#xff0c;页面数据过多时&#xff0c;需要滚动加载优化性能&#xff0c;本篇技术分享博客将介绍如何在uniapp中实现滚动加载和下拉刷新。 预览 滚动加载 下拉刷新 一、滚动加载 滚动加载指的是当用户滑…

LINUX系统编程-----上

文章目录 第一章 linux系统介绍(属于扯闲篇)linux的概况linux的历史起源unixPosix标准和其他标准开源运动linux的诞生 linux使用使用范围linux的登录 第二章 linux常用命令linux的shell使用切换用户显示所有用户退出当前用户添加用户 删除用户当前工作目录当前工作目录下的所有…

chatgpt赋能python:Python交换位置:如何快速交换列表中的元素

Python交换位置&#xff1a;如何快速交换列表中的元素 介绍 Python作为一种强大且易于学习的编程语言&#xff0c;一直受到广大开发者的喜爱和选择。而在Python编程中&#xff0c;往往需要对列表中的元素进行交换操作。那么&#xff0c;在本文中&#xff0c;我们将探讨Python…

u-boot启动流程分析-史上最全最详细

嗨喽&#xff0c;大家好&#xff0c;我是程序猿老王&#xff0c;程序猿老王就是我。 今天给大家全面的分析一下u-boot启动流程。整理这篇文章花费时间较长&#xff0c;中间很长时间未更新&#xff0c;希望这篇文章对大家有所帮助。 本章主要是详细的分析一下uboot的启动流程&am…

摆脱低工资!80%的高薪人会的动态大屏技巧,工具和教程都给你!

在汇报上下功夫已经是职业人基本的素养&#xff0c;看了某鹅厂的产品组朋友做的汇报才知道他们已经卷到了这种程度&#xff01;把静态的图表和文字&#xff0c;图片做成了3D动画&#xff0c;你别说&#xff0c;真就很出彩&#xff01;既有产品的仿真&#xff0c;又有数据的支撑…

Python编程技巧

当涉及到Python编程时&#xff0c;以下是一些技巧和惯用法&#xff0c;可以帮助您编写更加高效、可维护和优雅的代码&#xff1a; 1.使用描述性的变量名&#xff1a;选择具有描述性的变量和函数名&#xff0c;以便于理解代码的含义。避免使用单个字母或无意义的名称。 2.编写清…

Razor代码复用

1.布局&#xff08;Layout&#xff09;复用 Layout的使用&#xff0c;就像WebForm的模板页一样&#xff0c;甚至会更加简单&#xff0c;更加方便和明了。 要使用Layout&#xff0c;首先要在模板页相应的位置添加RenderBody()方法&#xff1a; <!DOCTYPE html><html la…

2.7 编译型和解释型

2.7 编译型和解释型 前面我们使用java和javac命令把Hello&#xff0c;World&#xff01;在控制台输出。那为什么输出&#xff0c;这里我们需要掌握两个知识点。编译型语言和解释型语言。在计算机的高级编程语言就分为编译型语言和解释型语言。而我们的Java既有编译型的特点也有…

docker compose部署ELK

1、准备下载相关镜像 docker pull logstash:7.6.2 docker pull kibana:7.6.2 docker pull elasticsearch:7.6.2 docker pull elastic/filebeat:7.6.22、创建相关文件夹 新建文件夹使用命令&#xff1a;mkdir /opt/docker_elk 在/opt/docker_elk/elasticsearch新建plugins和da…

chatgpt赋能python:Python代码怎么用?一个10年编程经验工程师的实践总结

Python代码怎么用&#xff1f;一个10年编程经验工程师的实践总结 如果你正在学习Python或已经是一名Python开发者&#xff0c;你需要知道如何正确地使用Python代码以实现项目需求。在本文中&#xff0c;我将分享我的10年Python编程经验&#xff0c;并介绍一些关于如何使用Pyth…

零基础认识java-后端 项目结构搭建、目录概况

后端项目构建 1、创建数据库表 2、创建项目 打开 idea&#xff0c;新建一个项目&#xff0c;在 new 一个新项目的时候&#xff0c;选择 Spring Initializr&#xff0c;在选择项目依赖的时候勾选 web下的 Spring Web Starter 和 SQL下的 MySQL Driver 和 MyBatis Framework &am…

Prop type `object` is forbidden

这种错一般是ESLint的配置的规则 项目里搜一下react/forbid-prop-types 可以看到把any和object禁用了&#xff0c;根据需要删除object即可

2023 CCF-百度松果基金正式启动申报!大语言模型、AIGC等热点课题首次公布

5 月 31 日&#xff0c;2023 年 CCF-百度松果基金&#xff08;简称“松果基金”&#xff09;正式启动申报&#xff0c;面向全球高校及科研院所青年学者开放&#xff0c;入选项目将获得松果基金百万课题基金及千万级支持与服务。申报截至 2023 年 7 月 10 日。 本届松果基金共设…

Nginx通过用户IP获取所在国家及地理位置

文章目录 前言一、GeoLite2-Country是什么&#xff1f;二、使用步骤2.1 下载GeoLite2-Country数据库文件&#xff0c;并导入Nginx2.2 配置Nginx模块2.3 使用变量来获取国家信息2.4 验证配置 总结 前言 Nginx是一款高性能、轻量级的Web服务器和反向代理服务器。它最初设计目的是…

JavaScript了解unshift,push在头部尾部添加元素的代码

以下为JavaScript了解unshift&#xff0c;push在头部尾部添加元素的程序代码和运行截图 目录 前言 一、unshift在头部添加元素 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 二、push在尾部添加元素 2.1 运行流程及思想 2.2 代码段 2.3 JavaS…

Javascript 俄罗斯方块 游戏代码

本俄罗斯方块代码采用 JavaScript 脚本代码写成&#xff0c;简单易懂&#xff1b; 全代码采用静态类及静态变量成员组成&#xff1b; 全脚本通过实现代码全局配置 OLSFK.Options {...} 定义方块起始坐标及定义各自的旋转点&#xff1b; 从初始化俄罗斯方块界面开始&#x…

【C++】指针 - 定义和使用,所占内存空间,空指针,野指针,const 修饰指针,指针和数组,指针和函数

文章目录 1. 定义和使用2. 所占内存空间3. 空指针4. 野指针5. const 修饰指针6. 指针和数组7. 指针和函数 1. 定义和使用 数据类型 * 变量名; 指针的作用是&#xff0c;可以通过指针间接访问内存。 内存编号是从 0 开始记录的&#xff0c;一般用十六进制数字表示。可以利用指…

关于如何用好线程池的一些建议

文章目录 1. 线程的使用场景2. 线程池创建3. 参数的配置建议常见的拒绝策略其他的拒绝策略 4. 线程池的任务处理流程5. 线程的状态6. 线程池的监控 1. 线程的使用场景 异步任务 简单来说就是某些不需要同步返回业务处理结果的场景&#xff0c;比如&#xff1a;短信、邮件等通…

一款IP渗透小工具

MoreFind 一款用于快速导出URL、Domain和IP的小工具 快速安装 方式一: 通过Go包管理安装 go install github.com/mstxq17/MoreFindlatest 方式二: 直接安装二进制文件 wget --no-check-certificate https://ghproxy.com/https://github.com/mstxq17/MoreFind/releases/…

软件测评师2012年下半年考试真题

基础知识&#xff1a; 解析&#xff1a;死锁就是运行不下去了&#xff0c;但是这里它说资源是同类型的&#xff0c;也就是说&#xff0c;我多出来的一个资源&#xff08;11个资源5个进程&#xff0c;每个进程分配2个&#xff09;给其中一个进程之后&#xff0c;运行完了资源释放…