首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏用户1337634的专栏

    如何避免事务

    MySQL的事务会因为事务视图太老,MVCC时中需要执行很多的回滚操作才能得到对应的数据版本,而且还会形成很大的回滚段,所以会影响性能。 那么在项目开发中,应该如何避免大事务呢? 一般可以从客户端和服务器端分别进行控制 客户端 设定事务执行的超时时间(SET MAX_EXECUTION_TIME),可以避免意外的事务占用过多资源 事务开始到结束的时间内,避免做耗时的操作,比如网络请求等 尽量把容易有冲突的SQL语句写在业务逻辑后面,减少锁占用时间 服务器端 监控 information_schema.Innodb_trx 表,设置事务阈值,超过就报警或者 kill 删除超时的连接: 日志分析可以使用pt-query-digest 如果使用的是 MySQL 5.6 或者更新版本,把 innodb_undo_tablespaces 设置成 2(或更大的值)。 如果真的出现大事务导致回滚段过大,这样设置后清理起来更方便。

    1.6K20发布于 2021-06-29
  • 来自专栏Postgresql源码分析

    Mysql事务总结

    事务现象 1 PROCESSLIST 只能看到sleep时间较长,并不能看出来是事务 2 INNODB_TRX select t. 但事务的trxquery是NUL,这并不是说事务什么也没执行,一个事务可能包含多个SQL,如果SQL执行完毕就不再显示了。 entries 1 MySQL thread id 71, OS thread handle 139874604435200, query id 9040045 172.17.0.1 server_234 二 事务内容 = 'SYSTEM_USER' AND ps.id = 进程ID ORDER BY esh.EVENT_ID; 三 事务等锁 mysql> select * from sbtest5 where tmp.blocking_thread = p.id AND t.thread_id = c.THREAD_ID AND t.processlist_id = p.id \G 四 监控事务

    1.2K51编辑于 2022-05-12
  • 来自专栏MySQL数据库技术栈

    如何查找事务及大事务

    INNODB_TRX 表提供了信息关于在InnoDB中执行的当前的每个事务,包含是否事务是等待一个锁,当事务开始后事务正在执行的SQL语句。 ---------+-----------------+------+-----+---------+-------+ 25 rows in set (0.01 sec) #trx_started:事务开始时间 ,可以判断该事务是否是事务。 #trx_rows_modified:事务更改的行数,可以判断该事务是否是大事务。 如何判断事务? #查找执行时间超过30秒的事务。 #查找修改行数数量前十的事务

    1.5K11编辑于 2022-05-25
  • 来自专栏温安适的blog

    事务引起线上问题

    (`point_id`); partner_XXX表,线上数据 4W, 空间25M,理论加索引时间,小于1s ​ 是什么造成卡住的,查看阿里云 自治服务-> 一键诊断 > 自治中心->事务和锁快照 部分,如下图发现: 加索引的语句,在等待元数据锁,被一个没有任何执行语句的幽灵事务卡主了。 幽灵事务的产生 IDEA 社区版本,Database Navigator 插件 多次执行show index,操作,并查看返回结果中的数据时,会开启事务,如下图 问题总结 首先,IDEA 社区版本, Database Navigator 插件,调用show index 语句,开启了 事务,没有提交,持有了metadata lock。

    47730编辑于 2022-05-05
  • 来自专栏MySQL技术

    MySQL-事务详解

    1.什么是事务 首先我们先要知道什么是事务,顾名思义就是运行时间比较长,长时间未提交的事务,也可以称之为大事务。这类事务往往会造成大量的阻塞和锁超时,容易造成主从延迟,要尽量避免使用事务2.如何找到事务 遇到事务等待问题时,我们首先要做的是找到正在执行的事务。 如果我们想看到这个事务执行过的SQL,看是否可以杀掉事务,怎么办呢? 3.监控事务 现实工作中我们需要监控下事务,定义一个阈值,比如说30s 执行时间超过30s的事务即为事务,要求记录并告警出来,提醒管理人员去处理。 总结: 本文主要介绍了事务相关内容,怎样找到事务,怎么处理事务,如何监控事务。可能有些小伙伴对事务理解还不多,希望这篇文章对你有所帮助。

    3.7K30发布于 2019-09-23
  • 来自专栏小工匠聊架构

    SpringBoot - 优雅的处理【事务

    What 运行时间比较长,长时间未提交的事务,都可以称之为事务 事务引发的常见危害有: 数据库连接池被占满,应用无法获取连接资源 容易引发数据库死锁 数据库回滚时间 在主从架构中会导致主从延时变大 等等 ---- How 原则: 对事务方法进行拆分,尽量让事务变小,变快,减小事务的颗粒度 我们知道@Transactional注解进行事务管理的操作叫声明式事务, 使用声明式事务的优点 很明显 声明式事务有一个最大的缺点,就是事务的颗粒度是整个方法,无法进行精细化控制。 那 与声明式事务对应的就是编程式事务 是不是可以解决 颗粒度的问题呢? return Boolean.TRUE; }); } 使用编程式事务最大的好处就是可以精细化控制事务范围, 所以避免事务最简单的方法就是不要使用声明式事务@Transactional,而是使用编程式事务手动控制事务范围 使用@Transactional 又能避免产生长事务 那既想使用@Transactional 又想避免产生长事务呢? 那就需要对方法进行拆分,将不需要事务管理的逻辑与事务操作分开.

    2.4K10编辑于 2022-03-10
  • 来自专栏大数据技术架构

    Kafka 的事务到底啥样?

    * 2、这个方法执行逻辑是: * (1)Ensures any transactions initiated by previous instances of the producer with * (2)Gets the internal producer id and epoch, used in all future transactional * messages producer.send(new ProducerRecord(topic, "1", msg.toString())); producer.send(new ProducerRecord(topic, "2" ProducerFencedException e1) { e1.printStackTrace(); producer.close();} catch (KafkaException e2) { e2.printStackTrace(); producer.abortTransaction();}producer.close(); Kafka 幂等与事务的关系 事务属性实现前提是幂等性

    1.8K10发布于 2019-08-16
  • 来自专栏kwai

    基于Druid的事务监听实现

    extends FilterEventAdapter { //记录事务状态与事务开启时间 private static final ThreadLocal<Long> TX_BEGIN_TIME 2事务告警(记录本次事务涉及到的sql+记录本次事务的应用层调用栈) if (TX_BEGIN_TIME.get()! config.getHealthCheckLongTxEnable()) { if (timeCost>=config.getHealthCheckLongTx()) { //事务告警 commonDto.setEventTime(LocalDateTime.now().toString()); commonDto.setEventType("事务 } } }catch (Throwable e){ e.printStackTrace(); } } }2

    4.4K82编辑于 2022-12-01
  • 来自专栏oracleace

    MySQL 8.0:如何找到事务(译文)

    内容摘要:让我们看看如何在MySQL 8.0中轻松找到那些可能成为DBA噩梦的正在运行的事务。 运维与优化》的作者 中国唯一一个Oracle高可用大师 拥有包括 Oracle 10g和12c OCM在内的20+数据库相关认证 曾任IBM公司数据库部门经理 现在一家第三方公司任首席数据库专家,服务2万 让我们看看如何轻松找到那些可能成为DBA噩梦的事务(参见MySQL历史列表长度文章https://lefred.be/content/a-graph-a-day-keeps-the-doctor-away-mysql-history-list-length WHERE conn_id=<VALUE OF mysql_thread_id COLUMN>) ORDER BY event_id; 让我们试一下: 如您所见,我们可以查询在这个事务中已经执行的 享受MySQL,避免事务

    1.9K20编辑于 2023-04-06
  • 来自专栏技术成长

    MySQL进行故障恢复以及处理事务

    在MySQL中处理事务的方法包括以下几个方面:避免事务:尽量减少长时间运行的事务,将事务拆分为较小的逻辑单元,减少锁定资源的时间。快速提交:尽量减少事务的持续时间,避免不必要的等待。 设置合适的事务隔离级别:根据业务需求设置合适的事务隔离级别,避免不必要的锁定和冲突。控制事务的并发数:通过限制同时运行的事务数量,可以减少事务对性能的影响。 事务对性能的影响包括以下几个方面:锁定资源时间:事务持有锁定资源的时间较长,会导致其他事务的等待时间增加,从而影响了并发性能。事务日志写入:事务进行过程中,会不断的产生事务日志,并写入磁盘。 数据页面膨胀:事务会导致数据页面过早的膨胀,使得其他并发事务在需要访问该数据页面时,需要有更长的等待时间。 总结事务对性能的影响主要表现在锁定资源时间的增加、事务日志写入的增加、数据页面膨胀以及回滚时间的增加等方面。因此,需要合理地管理和控制事务,以保证系统的性能和可用性。

    78871编辑于 2023-11-07
  • 来自专栏站长的编程笔记

    【说站】Mysql事务有什么影响

    Mysql事务有什么影响 1、事务意味着系统中会有一个非常旧的事务视图。在提交此事务之前,应保留回滚记录,这将导致大量的存储空间。 2事务也会占用锁资源,可能会拖累数据库。 = 'SYSTEM_USER'   AND ps.id = 进程ID ORDER BY   esh.EVENT_ID; 以上就是Mysql事务的影响,希望对大家有所帮助。

    87510编辑于 2022-11-24
  • 分布式事务SAGA模式详解:事务与复杂流程的柔性事务方案

    分布式事务SAGA模式详解:事务与复杂流程的柔性事务方案在分布式系统中,并非所有事务都是“短平快”的操作。 一、铺垫:事务场景的痛点,SAGA的诞生背景要理解SAGA的价值,首先要明确事务/复杂流程场景下,传统分布式事务方案的核心短板:2PC/3PC完全失效:事务流程中,参与者需长时间持有资源锁,阻塞问题会被无限放大 事务步骤链:所有LT按业务流程顺序组成的串行链(LT1→LT2→LT3→…→LTn),对应的补偿事务组成反向串行链(CTn→CTn-1→…→CT2→CT1),回滚时按反向顺序执行补偿事务。 ”消息,库存服务消费消息,执行LT2(扣减库存),提交本地事务;库存服务通过MQ发送“库存扣减成功”消息,支付服务消费消息,执行LT3(发起支付,状态为“待支付”),提交本地事务;若LT2(扣减库存)失败 核心优势:适配事务,低侵入易落地完美适配事务场景:每个本地事务执行后立即提交,无资源锁阻塞,支持流程中的长时间等待(如用户支付等待、物流运输),彻底解决了强一致性方案在事务中的痛点;业务侵入性低:

    82710编辑于 2025-12-26
  • 来自专栏故里学Java

    MySQL的事务隔离级别和事务,看这一篇就够了

    隔离级别是“读未提交”,则V1的值是2,这个时候虽然事务B还没有提交,但是结果已经被事务A看到了,所以V2,V3也都是2. 隔离级别是“读提交”,则V1的值是1,查询V2的时候事务B已经提交,所以事务B的更新事务A是可以看到的,所以V,V3也是。 隔离级别是“串行化”,在事务B执行将1改为2的时候,会被锁住,等事务A执行完提交后,事务B才可以继续执行,所以从事务A的角度来看,V1、V2值是1,V3的值是2. 有一些客户端连接框架会默认连接成功后执行一个set autocommit = 0命令,这就导致了接下来的查询都在事务中,如果是连接,就导致了意外的事务。 怎么查询各个表中的事务? 如何避免事务的出现? 既然在看了,就点一下吧!

    1.4K20发布于 2020-11-25
  • 来自专栏多线程

    Spring事务事务传播机制(2

    Spring事务管理提供了灵活的方式来处理事务,包括事务的创建、提交、回滚以及事务的传播行为。 书接上回:Spring事务事务传播机制(1) 2、Spring 中设置事务隔离级别 Spring 中事务隔离级别可以通过 @Transactional 中的 isolation 属性进行设置,具体操作如下图所示 该隔离级别因为可以读取到其他事务中未提交的数据,而未提交的数据可能会发生回滚,因此我们把该级别读取到的数据称之为脏数据,把这个问题称之为脏读 2、READ COMMITTED: 读已提交,也叫提交读,该隔离级别的事务能读取到已经提交事务的数据因此它不会有脏读问题 Spring 事务传播机制定义了多个包含了事务的方法,相互调用时,事务是如何在这些方法间进行传递的。 2、为什么需要事务传播机制? 嵌套事务和加入事务有什么区别 整个事务如果全部执行成功,二者的结果是⼀样的。 如果事务执行到一半失败了,那么加入事务整个事务会全部回滚;而嵌套事务会局部回滚,不会影响上一个方法中执行的结果

    60520编辑于 2023-10-16
  • 来自专栏颇忒脱的技术博客

    事务 - 2PC

    2PC github 在上一篇文章中我们介绍了本地事务,随着软件复杂度的上升,我们会需要一种可以在多个数据库之间完成事务(分布式事务)的方法,而这个方法也必须能够保证ACID。 于是就出现了2PC - Two phase commit protocol。事实上2PC不仅仅适用于多数据库事务场景下使用,也适用于所有支持2PC的参与方(Participants)。 缺点 根据上面的算法介绍可以看出2PC是一个阻塞协议: 如果两个事务针对同一个数据,那么后面的要等待前面完成,这是由于Cohort采用的是本地事务所决定的 Cohort在commit request phase 之后会阻塞,直到进入Coordinator告之Cohort进入commit phase 对于ACID的保证 2PC所保证的ACID和本地事务所提到的ACID不太一样——事实上对于所有分布式事务来说都不太一样 : A,正常情况下保证 C,在某个时间点,会出现A库和B库的数据违反一致性要求的情况 I,在某个时间点,A事务能够读到B事务部分提交的结果 D,和本地事务一样,只要commit则数据被持久 XA XA是一个针对分布式事务

    89830发布于 2018-10-19
  • 来自专栏kafka

    事务 - 2PC提交

    场景:你的业务一次操作需要同时更新多个资源,比如:两个不同的MySQL库(你现在问的场景)数据库+消息队列数据库+缓存等如果不用分布式事务,就可能出现:A库更新成功,B库更新失败→数据不一致2PC要解决的就是 二、2PC会带来哪些问题?1.性能开销大一次事务要走两个阶段,网络往返多、日志写入多。prepare阶段会长时间持有锁到commit完成,吞吐量下降,冲突增多。 2.锁时间,容易造成阻塞在prepare之后到最终commit/rollback之前,相关行/页/表都被锁住。协调器慢、网络抖动、参与者负载高→这些锁就会被持有更久,其他事务被阻塞,甚至导致雪崩。 总结:2PC解决的是:跨多个资源的强一致性(原子提交)问题。代价是:性能下降、锁时间、易阻塞、协调器单点风险、故障场景复杂、运维困难。 所以很多系统宁可用「本地事务+Outbox+CDC/消息」做最终一致性,也会慎用XA级别的2PC。

    11410编辑于 2026-01-13
  • 来自专栏Java实战博客

    2 Redis 事务 & 乐观锁

    Redis事务没有事务隔离的级别。 但是Redis事务的本质是:将一组操作放入队列(先进先出)中,批量执行。 关系型数据库的事务是:将事务操作(DML)语句写入日志。 事务相关的命令 Multi:开启事务 Exec:执行事务 Discard:终止事务 image.png 说明:Exec之前的事务操作可以被discard终止 但是一旦exec 本次事务就会执行! Redis 如何实现事务呢? 开启一个队列 让命令进入队列 执行事务 # 1 开启事务 multi # 2 输入命令 set k1 v1 set k2 v2 get k2 set k2 v3 get k2 # 3 执行/放弃事务 watch 需要锁Key名 # 线程1 操作:开启事务,并设置money为80 但不执行事务 multi set money 80 或者 decrby money 20 # 线程2 操作:读取money

    58320编辑于 2022-01-19
  • 来自专栏sql优化

    事务范围控制:避免锁的数据库优化策略

    引言:高并发场景下的数据库性能瓶颈在电商秒杀、金融交易等高并发场景中,数据库事务引发的锁竞争是典型的性能瓶颈。笔者曾参与某支付系统优化,发现超过 60% 的慢查询源于事务范围过大导致的锁等待。 锁的四大危害阻塞链式反应:一个事务可能阻塞数十个后续请求,形成雪崩效应。 死锁概率激增:交叉持有锁的资源增多,死锁检测成本飙升。 连接池耗尽:等待锁的会话占满连接池,触发系统级拒绝服务。 复制延迟:主从同步因事务滞后,影响读写分离架构。 优化对比: 原始方案 优化方案 锁持有时间事务含业务逻辑 拆分事务与业务逻辑 从 2s→0.1s批量更新单事务 分批次提交 Saga 模式通过拆分全局事务为可逆子事务实现控制: Saga 执行框架 关键优势:每个子事务独立提交,锁范围缩小至单服务内。

    33521编辑于 2025-06-30
  • 来自专栏育种数据分析之放飞自我

    R语言进阶笔记2 | 数据与ggplot2

    0.359 0.450 0.392 30 132 258 390 570 这里,相对h1,h2,h3,h4,h5这五个性状进行作图,我们可以将其转化为「数据」! ,无论是清洗数据,还是汇总统计,还是ggplot2可视化,都喜欢数据。 ❝飞哥注:我今天明白了这个道理,即tidyverse系列喜欢数据,感觉打开了任督二脉,对于数据处理又有了新的理解。 ❞ 2. Year 第四个values_to是保存的性状名,这里是Height 可以看到,数据有3列,分别是: TreeID Year Height 3. ggplot2作图怎么搞 之前我使用ggplot2作图时 当我知道了ggplot2数据之后,又是另一种理解: library(ggplot2) re %>% ggplot(.

    1.2K20发布于 2020-12-29
  • 来自专栏架构专题

    又一批事务,P0故障谁来背锅?

    为什么要用事务? 在许多业务非常复杂的后台系统,经常频繁操作DB,为了保证数据的一致性,能够在出错时回滚数据,通常会使用事务。 就拿最简单的单机数据库事务来说。 在事务操作期间,如果持续时间过长,只有等事务结束之后,DB连接才会释放,此类长时间占用DB连接的事务操作,称为事务。 也就是说,连接资源被少数事务操作占用。在这种情况下,即使是最简单接口查询,都不能够正常进行。 几粒老鼠屎,坏了一锅粥。 一些魔幻的反应 当你去排查这种问题的时候,可能会陷入僵局。 2) 每个事务操作都给予足够重视,对于执行复杂度和时间复杂度不确定的事务,添加超时报警,及时发现引起的原因。 同时,还需要加强监控,辅助进行问题排查。 2) 使用jstack查询执行栈,找出阻塞的点。 3) 排查并联系下游服务,找出主要原因 xjjdog倾向于使用监控快速发现问题。

    1.2K20发布于 2020-04-10
领券