如何避免长事务对业务的影响?

简介: 大家好前面我们大概了解了关于事务的隔离级别,实现方式,启动方式的细节,长事务与短事务的区别。今天我们延伸介绍一下,如果因为失误用了长事务,那我们在工作中如何发现问题,排查问题?

预热


比较喜欢的一段话:不经一番寒彻骨,怎得梅花扑鼻香,学习是枯燥的请大家坚持!


大家好前面我们大概了解了关于事务的隔离级别,实现方式,启动方式的细节,长事务与短事务的区别。今天我们延伸介绍一下,如果因为失误用了长事务,那我们在工作中如何发现问题,排查问题?


开始


这个问题,我们可以从应用开发端和数据库端来看。

首先,从应用开发端来看:

  1. 确认是否使用了 set autocommit=0。这个确认工作可以在测试环境中开展,把 MySQL 的 general_log 开起来,然后随便跑一个业务逻辑,通过 general_log 的日志来确认。一般框架如果会设置这个值,也就会提供参数来控制行为,你的目标就是把它改成 1 (自动提交)。
  2. 确认是否有不必要的只读事务。有些框架会习惯不管什么语句先用 begin/commit 框起来。我见过有些是业务并没有这个需要,但是也把好几个 select 语句放到了事务中。这种只读事务可以去掉。
  3. 业务连接数据库的时候,根据业务本身的预估,通过 SET MAX_EXECUTION_TIME 命令,来控制每个语句执行的最长时间,避免单个语句意外执行太长时间。具体的意外我们后续再介绍

其次,从数据库端来看:

  1. 监控 information_schema.Innodb_trx 表,设置长事务阈值,超过就报警 / 或者 kill;
  2. Percona 的 pt-kill 这个工具不错,推荐使用;
  3. 在业务功能测试阶段要求输出所有的 general_log,分析日志行为提前发现问题;
  4. 如果使用的是 MySQL 5.6 或者更新版本,把 innodb_undo_tablespaces 设置成 2(或更大的值)。如果真的出现大事务导致回滚段过大,这样设置后清理起来更方便。


相关文章
|
供应链 架构师 BI
数仓实践:总线矩阵架构设计1
数仓实践:总线矩阵架构设计1
2530 0
数仓实践:总线矩阵架构设计1
Vue3+Vite+Js项目搭建之三:vue-router 路由构建
Vue3+Vite+Js项目搭建之三:vue-router 路由构建
402 1
|
存储 JSON 关系型数据库
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
439 0
|
存储 SQL 分布式计算
从源码看Velox如何做序列化
从源码角度分析Velox做序列化和反序列化的过程
1232 0
|
SQL 消息中间件 关系型数据库
ClickHouse(10)ClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析
`ReplacingMergeTree`是ClickHouse的一种表引擎,用于数据去重。与`MergeTree`不同,它在合并分区时删除重复行,但不保证无重复。去重基于`ORDER BY`列,在ver列未指定时保留最新行,否则保留ver值最大者。数据处理策略包括延迟合并导致的不确定性及按分区去重。`CREATE TABLE`语法中,`ReplacingMergeTree`需要指定可选的`ver`列。相关系列文章提供了更深入的解析。
814 0
|
Java Linux Shell
Linux后台运行jar程序
【7月更文挑战第23天】
335 1
|
SQL 存储 分布式计算
Hive精选10道面试题
Hive精选10道面试题
738 3
Hive精选10道面试题
|
存储 安全 关系型数据库
MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)
MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)
1024 1
|
安全 Java API
Java中的并发编程:深入理解线程同步与协作机制
在Java的并发编程领域中,线程间的同步与协作是实现高效、稳定多线程应用的关键。本文将深入探讨Java中用于线程同步的各种锁机制,包括内置锁和显式锁,以及线程间协作的等待/通知机制。同时,我们将通过实例分析这些机制的应用,并指出常见的并发问题及解决方案,旨在为读者提供一套完整的Java并发编程指南。
|
安全 Ubuntu Linux
Linux Sudo权限提升漏洞(CVE-2023-22809)
Sudo存在权限提升漏洞,攻击者可过特定的payload获取服务器ROOT权限
458 3