美文网首页
系统中应当避免长事务,会用什么方案来避免出现或者处理?

系统中应当避免长事务,会用什么方案来避免出现或者处理?

作者: 曹大大 | 来源:发表于2023-01-16 10:10 被阅读0次

为什么建议你尽量不要使用长事务?

1.长事务意味着系统里会存在很老的事务视图。由于这些事务随时可能访问数据库里面的任何数据,所以这个事务提交之前,数据库里面它可能用到的回滚记录(MVCC机制)必须保留,这就会导致大量占用存储空间。
2.MySQL5.5及以前的版本,回滚日志是跟数据字典一起放在ibdata文件里面的,即使长事务最终提交,回滚段被清理,文件也不会变小。
3.长事务还会占用锁资源。

系统中应当避免长事务,会用什么方案来避免出现或者处理?

应用开发端来看:

  1. 是否使用自动提交事务,可以打开general_log(mysql中的所有操作将会记录下来),随便跑一个业务来确认。
  2. 确认是否有不必要的只读事务。有些框架习惯不管什么语句先用begin/commit框起来。我见过有些业务并没有这个需要,但是也把好几个select语句放到事务中。
  3. 通过set max_execution_time命令来控制每个语句的最长执行时间。

数据库端来看:

  1. 监控Innodb.trx表,设置长事务阈值,超过就报警/或者kill。
    使用方式:
/*使用information_schema库的innodb_trx这个表中查询长事务,比如下面这个语句,用于查询持续时间超过60s的事务。*/
select * from information_schema.innodb_trx where >TIME_TO_SEC(timediff(now(),trx_started))>60
  1. Percona的pt-kill这个工具不错,推荐使用。(用来杀掉指定匹配条件的慢查询会话以保证mysql实例的可用性。)
  2. 在业务功能测试阶段要求输出所有的 general_log,分析日志行为提前发现问题。
  3. 如果使用的是 MySQL 5.6 或者更新版本,把 innodb_undo_tablespaces 设置成 2(或更大的值)。如果真的出现大事务导致回滚段过大,这样设置后清理起来更方便。

相关文章

  • 系统中应当避免长事务,会用什么方案来避免出现或者处理?

    为什么建议你尽量不要使用长事务? 1.长事务意味着系统里会存在很老的事务视图。由于这些事务随时可能访问数据库里面的...

  • MySQL实战问题解决

    一、系统粒粒面应该避免长事务,如果你是业务开发负责人同时也是数据库负责人,你会有什么方案来避免出现或者处理这种情况...

  • 03 | 事务隔离:为什么你改了我还看不见?

    系统里面应该避免长事务,如果你是业务开发负责人同时也是数据库负责人,你会有什么方案来避免出现或者处理这种情况呢?如...

  • Spring事务传播性与隔离级别

    事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题。 事务最重要的...

  • 如何避免长事务

    MySQL的长事务会因为事务视图太老,MVCC时中需要执行很多的回滚操作才能得到对应的数据版本,而且还会形成很大的...

  • 分布式事务解决方案

    根据微服务架构的鼻祖 Martin Fowler 的忠告,微服务架构中应当尽量避免分布式事务。 分布式事务的讨论主...

  • 分布式事务解决方案

    根据微服务架构的鼻祖 Martin Fowler 的忠告,微服务架构中应当尽量避免分布式事务。 分布式事务的讨论主...

  • 如何使用Android WakeLock?

    在Android应用或者Framworks里面,要如何使用Android WakeLock来避免系统待机,或者系统...

  • 基于Redisson的分布式锁

    1、概述 什么是分布式锁?在分布式系统中,常常需要协调各个系统的动作,保证事务的一致性或者避免重复执行相同操作。如...

  • 为什么要尽量避免长事务?

    结合锁和MVCC的知识点:例如如果客户端压力非常大,迟迟不能接口数据,那么对服务端来说就形成了一个“长事务”:如果...

网友评论

      本文标题:系统中应当避免长事务,会用什么方案来避免出现或者处理?

      本文链接:https://www.haomeiwen.com/subject/shjzcdtx.html