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

客户都不愿意做网站老铁seo外链工具

客户都不愿意做网站,老铁seo外链工具,安徽网站建设外贸,建设部执业注册网站引言 一文带你搞懂Spring事务上篇文章介绍了Spring事务相关内容,本文主要介绍业务开发中遇到的大事务问题。 https://github.com/WeiXiao-Hyy/blog 整理了Java,K8s,极客时间,设计模式等内容,欢迎Star! 什么是大事务 运行时间(调用远程事务或…

引言

一文带你搞懂Spring事务上篇文章介绍了Spring事务相关内容,本文主要介绍业务开发中遇到的大事务问题。

https://github.com/WeiXiao-Hyy/blog 整理了Java,K8s,极客时间,设计模式等内容,欢迎Star!

什么是大事务

运行时间(调用远程事务或接口中需要执行的SQL比较多)比较长,长时间未提交的事务可以称之为大事务。

大事务产生的原因

  • 操作的数据比较多
  • 大量的锁竞争
  • 事务中其他非DB的耗时操作
  • ……

大事务造成的影响

  • 并发情况下,数据库连接池容易被撑爆
  • 锁定太多的数据,造成大量的阻塞和锁超时
  • 执行时间长,容易造成主从延迟
  • 回滚所需要的时间比较长
  • undo log 膨胀
  • ……

通用解法

  • 使用编程式事务
  • 查询放到事务外侧,避免不必要的查询
  • 避免一次处理太多数据
  • 异步操作(需要考虑的是监控重试+兜底补偿)
  • 避免耗时太多的操作,造成事务超时

基于MySQL5.7的解法

  • 如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放
  • 通过 SETMAX_EXECUTION_TIME 命令, 来控制每个语句查询的最长时间,避免单个语句意外查询太长时间
  • 监控 information_schema.Innodb_trx 表,设置长事务阈值,超过则报警或者kill
  • 在业务功能测试阶段要求输出所有的 general_log ,分析日志行为提前发现问题
  • 设置 innodb_undo_tablespaces 值,将 undo log 分离到独立的表空间。如果真的出现大事务导致回滚段过大,这样设置后清理起来更方便

案例说明

使用编程式事务

class A {@Transactional(propagation = Propagation.REQUIRED)public void foo() {}
}class A {TransactionTemplate transactionTemplate = new TransactionTemplate();public void foo() {transactionTemplate.executeWithoutResult(transactionStatus -> {try {} catch (Exception e) {transactionStatus.setRollbackOnly();}});}
}

避免一次处理太多数据

如果在内存处理大量的数据时占用druid线程池中线程时间过长,可能会导致大事务回滚。原因如下:

druid配置参数

spring:datasource:druid:remove-abandoned: true # 获取连接后, 如果空闲时间超过removeAbandonedTimeoutMills秒后没有close, druid会默认回收;remove-abandoned-timeout: 60 # 超时时间 默认秒;log-abandoned: true # 如果回收了连接,是否要打印一条 log,默认 false;

如果事务中需要锁多个行,把最可能造成锁冲突、影响并发度的锁尽量往后放

MySQL事务,两阶段锁协议

在InnoDB事务中,行锁是在需要的时候才加上的,但并不是不需要了就立即释放,而是等待事务结束时才释放。

案例举例

假设实现一个电影票在线交易业务,顾客A要在影院B购买电影票,简化一点,需要涉及到以下操作:

  1. 从顾客A账户余额中扣除电影票价
  2. 给影院B的账户余额增加电影票价
  3. 记录一条交易日志

如果另一个顾客C要在影院B买票,那么这两个事务冲突的部分就是语句2,如果把语句2安排在最后,那么影院账户余额这一行的锁时间最少。这就最大程度地减少了事务之间的锁等待,提升了并发度。

提供一个可行的解决方案

参考JDK1.7的ConcurrentHashMap的分段锁设计,将一行数据改成逻辑上的多行数据来减少锁冲突,以影院的账户为例,可以将一个账号信息放在多条记录上,比如10个记录,影院的账户总额等于这10个记录的值的总和。这样每次要给影院账户加金额的时候,随机选其中一条记录来加。这样每次冲突概率变成原来的1/10,可以减少锁等待个数,也就减少了死锁检测的CPU消耗。

先锁和后锁的区别

  • 先锁:如果在事务开始时就锁定高冲突资源,那么这个资源在整个事务期间被锁定,直到事务结束。这意味着其他事务在整个事务期间都必须等待这个锁释放;
  • 后锁:如果在事务的最后才锁定高冲突资源,那么这个资源的锁定时间会缩短, 因为前面的操作已经完成,锁定和释放的时间间隔变短。这样,其他事务等待这个锁的时间也会缩短;

Undo log 膨胀

所有更改的数据都需要记录在undo log中。如果事务非常大,涉及大量的数据修改,那么undo log就会迅速增长,这就是所谓的"膨胀"。

参考资料

  • https://juejin.cn/post/7213636024110956599
  • https://juejin.cn/post/6850418121703882765
  • https://blog.csdn.net/zhizhengguan/article/details/120997766
http://www.bjxfkj.com.cn/article/103605.html

相关文章:

  • 环保网站建设郑州网站技术顾问
  • 永久免费的自建网站推广普通话宣传标语
  • window2008 网站建设市场营销是做什么的
  • 大型网站的空间企业网站管理系统源码
  • 网站建设社区湖北seo
  • 如何设计一个网站没灵感头条搜索是百度引擎吗
  • 2019网站seo网络营销案例实例
  • 营销网站建设工作灰色关键词排名代发
  • 特供邯郸做网站北京专业网站优化
  • 智能网站建设制作win10最强优化软件
  • 高唐网站开发螺蛳粉营销策划方案
  • 做qq的网站seo顾问公司
  • 信用网站建设标准技能培训机构
  • 微信网站制作公司哪家好推广拉新app哪几个靠谱
  • 做网站需要固定ip么seo伪原创工具
  • 做网站小程序挣钱吗青岛网站seo推广
  • 公司网站重新建站通知手机清理优化软件排名
  • markdown做网站编辑器平谷头条新闻
  • 深圳市汇成品牌营销策划有限公司关键词优化推广
  • 字画价格网站建设方案在线磁力搜索引擎
  • 怎么注册网站啊100个商业经典案例
  • 手机网站制作教程视频教程市场调研报告包括哪些内容
  • 一个网站可以做几个关键词泉州关键词优化软件
  • 路桥做网站网络推广方案模板
  • 网站建设英文字体视频app推广
  • 门户网站开发的价格网络营销推广流程
  • 网络服务商能删除网站上海百度推广客服电话多少
  • 公司平台网站建设郑州做网络营销渠道
  • 安阳网络公司广州搜索seo网站优化
  • 庐江网站建设谷歌chrome浏览器