前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何避免长事务

如何避免长事务

作者头像
十毛
发布2021-06-29 10:47:35
1.1K0
发布2021-06-29 10:47:35
举报

MySQL的长事务会因为事务视图太老,MVCC时中需要执行很多的回滚操作才能得到对应的数据版本,而且还会形成很大的回滚段,所以会影响性能。 那么在项目开发中,应该如何避免大事务呢?

一般可以从客户端和服务器端分别进行控制

客户端

  • 设定事务执行的超时时间(SET MAX_EXECUTION_TIME),可以避免意外的长事务占用过多资源
  • 事务开始到结束的时间内,避免做耗时的操作,比如网络请求等
  • 尽量把容易有冲突的SQL语句写在业务逻辑后面,减少锁占用时间

服务器端

  • 监控 information_schema.Innodb_trx 表,设置长事务阈值,超过就报警或者 kill
  • 删除超时的连接: pt-kill --busy-time 60 --kill
  • 在业务功能测试阶段要求输出所有的 general_log,分析日志行为提前发现问题。日志分析可以使用pt-query-digest
  • 如果使用的是 MySQL 5.6 或者更新版本,把 innodb_undo_tablespaces 设置成 2(或更大的值)。如果真的出现大事务导致回滚段过大,这样设置后清理起来更方便。但是这个选项在MySQL未来的版本会去掉,到时候回滚段会使用改进后的存储方式,比如支持压缩The innodb_undo_tablespaces option is deprecated; expect it to be removed in a future release.

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 客户端
  • 服务器端
  • 参考
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档