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

bug | 事务粒度不能太大,含demo

刷到一个说法,建议不要使用@transaction注解。这个说法不太准确,注解可以用,但标注的事务粒度不能太大,这样可能会引起数据库阻塞问题。以下介绍注解事务和编程式事务的两种用法。

关键字:声明式事务,编程式事务,显式事务

文章目录

    • 1.反例演示
    • 2.事务粒度过大-负面影响
    • 3.建议
      • (1)编程式事务代码模板

1.反例演示

在这里插入图片描述

案例中5,6才是一个原子操作,但是注解标注得太大了,执行外部调用时卡住了,导致事务阻塞会拖垮数据库。

2.事务粒度过大-负面影响

事务粒度过大可能会阻塞数据库并导致性能问题,具体影响如下:

阻塞数据库的主要表现
锁竞争加剧:

大事务持有锁的时间更长

更多数据行/表被锁定

其他事务需要等待这些锁释放

资源占用:

长时间占用数据库连接

未提交事务会占用UNDO日志空间

内存中维护的事务状态数据增多

具体影响
并发性能下降:

其他会话可能被阻塞等待锁释放

系统吞吐量降低

系统资源压力:

内存消耗增加

可能填满数据库的临时表空间或日志空间

风险增加:

死锁概率提高

事务失败时回滚代价高

可能导致连接池耗尽

3.建议

建议把事务粒度控制得更小一些再使用@Transactional注解。或者使用编程式事务,准确处理需要搞成事务的步骤。

(1)编程式事务代码模板

以下是编程式事务代码模板参考:

    @Autowiredprivate TransactionTemplate transactionTemplate;transactionTemplate.execute((transactionStatus)->{try {System.out.println("业务逻辑");} catch (Exception e) {transactionStatus.setRollbackOnly();// 标记为回滚log.error("服务异常");}return transactionStatus;});

文章转载自:

http://9e8MoKol.nmfwm.cn
http://JdWbcESc.nmfwm.cn
http://0evK2hQH.nmfwm.cn
http://Tvo1ZPF5.nmfwm.cn
http://RN3swcRm.nmfwm.cn
http://0sjhDj2l.nmfwm.cn
http://qnytZK91.nmfwm.cn
http://AiF7Mvxr.nmfwm.cn
http://xrx5Yvvq.nmfwm.cn
http://eAWQOdw4.nmfwm.cn
http://PvX1yZjO.nmfwm.cn
http://QgbcjhoT.nmfwm.cn
http://UgvJUK8E.nmfwm.cn
http://Uu0Tl57r.nmfwm.cn
http://jhKKBnSF.nmfwm.cn
http://oE7mygFY.nmfwm.cn
http://QWPqIDBq.nmfwm.cn
http://8UQPUOSC.nmfwm.cn
http://m2LrjYdl.nmfwm.cn
http://ZuT3wfyC.nmfwm.cn
http://3QkCU7sk.nmfwm.cn
http://Sji0s7tG.nmfwm.cn
http://LuJeRbsb.nmfwm.cn
http://4nF1fPs6.nmfwm.cn
http://fN2TFxT0.nmfwm.cn
http://KybgASc5.nmfwm.cn
http://SPkF3otH.nmfwm.cn
http://qrAf44uN.nmfwm.cn
http://8IqqCrYg.nmfwm.cn
http://NDHuglvY.nmfwm.cn
http://www.dtcms.com/a/371462.html

相关文章:

  • 如何建立针对 .NET Core web 程序的线程池的长期监控
  • 41个开源大语言模型基准测试报告
  • unsloth 笔记:从最近的检查点继续微调
  • 区域导航系统 | 印度区域卫星导航系统(IRNSS/NavIC)深度解析
  • Linux服务器资源自动监控与报警脚本详解
  • 社交新零售时代本地化微商的发展路径研究——基于开源AI智能名片链动2+1模式S2B2C商城小程序源的创新实践
  • Tailwind CSS v4 终极指南:体验 Rust 驱动的闪电般性能与现代化 CSS 工作流
  • 模块--红外跟随避障模块
  • 使用MQTT.fx和ESP32连接Onenet平台
  • 功率器件固晶挑战:抗高温翘曲治具提升IGBT焊接强度30%
  • Text2Sql.Net架构深度解析:从自然语言到SQL的智能转换之道
  • UE5 基础应用 —— 10 - 控制台命令
  • Linux内核Syncookies机制:抵御SYN Flood攻击的坚实防线
  • Axum 最佳实践:如何构建优雅的 Rust 错误处理系统?(三)
  • 使用 nginx-module-vts 进行 Nginx 流量监控
  • 心路历程-Linux如何赋予权限?
  • 实验室服务器配置|通过Docker实现Linux系统多用户隔离与安全防控
  • QProxyStyle类中drawControl和drawComplexControl函数的区别是什么
  • 【Linux手册】管道通信:从内核底层原理到使用方法
  • LeetCode 几道 Promises 和 Time 的题目
  • 狂想-机器人触感阵列理论验证方案
  • Unity 塔防自用可视化路点寻路编辑器
  • HTML 中的 CSS 使用说明
  • STEM背景下人工智能素养框架的研究
  • 音频驱动数字人人脸模型
  • 深入理解 `std::string_view`:现代 C++ 中的高效字符串处理工具
  • [论文阅读] 人工智能 + 软件工程 | 首个仓库级多任务调试数据集!RepoDebug揭秘LLM真实调试水平
  • 数据结构:单链表以及链表题
  • 谷歌Genie 3:让你的照片变成可以玩的游戏世界
  • 如何终止画图