大事务问题场景与应对之策

2024-01-22 08:44

本文主要是介绍大事务问题场景与应对之策,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先来说说大事务问题是什么

  • 如果锁定的资源多,容易造成大量的死锁和锁超时

                eg:下单接口正常耗时是100ms,理论上支持10tps,但是有一个请求因其他原因导致耗时10s,这时很多其他请求就会锁超时

  • 如果事务回滚则会占用大量存储空间,同样回滚所需要的时间也会变长

                因为回滚日志只有在不需要的时候才会删除,事务没提交时不能被删除

  • 执行时间长,主从延迟

                目前mysql的架构就是主从,代码查基本都改造成从节点,如果有大事务问题,这点尤为明显


应对之策

  • 代码中尽量避免在没必要的地方使用@Transactional

                仅做查询的地方就不需要加,注解覆盖的方法尽可能的粒度要小

  • 事务中避免远程调用

                1. 将远程调用的动作尽可能的放在事务外去操作
                2. 如果因业务流程,没办法将远程调用的操作放到事务外,那么应该严格控制远程调用的 连接时间 读取时间等几个配置

  • 非手动事务执行

                1. 这点在第一点其实有表明一些,降低事务的粒度
                2. 一些对数据准确性要求没那么高的可以不放事务中执行

  • 非必要不加锁

                首先加锁相对不加是要更费时的,而且很多业务分析下来可能没有什么并发,可以使用version版本号来操作

  • 异步处理

                可以抽出去不放在事务中的可以使用异步,但是要分析数据一致性的问题

  • 避免使用事务一次性处理太多数据

              特别是连接资源紧张时,此操作影响尤为明显,因数据库连接一直占用是不会主动放开的(题外话:cpu调度策略可以看看,这里连接则对应FIFO,先到先拿数据库连接),所以我们尽可能的少量多次去执行,这样整体可能会更优(需要根据实际情况分析)

这篇关于大事务问题场景与应对之策的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码