首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >即使没有对表进行任何更改,启动&提交MySQL事务是否有很大的成本?

即使没有对表进行任何更改,启动&提交MySQL事务是否有很大的成本?
EN

Stack Overflow用户
提问于 2020-08-24 21:18:18
回答 3查看 681关注 0票数 2

这个应用程序运行在AWS EC2上,使用RDS/MySQL (5.7)。

我们有一个审计脚本,它访问MySQL用户表中的每个用户。\

对于每个用户,我们

  • Unconditionally启动事务时,
  • 可能会对用户的记录进行一些更改,并对其他tables.
  • Unconditionally提交事务。

现在,在步骤2中很可能(也很常见)没有对任何表进行任何更改。在代码检查过程中,出现了一个问题,即在没有进行任何更改的情况下,启动/提交多个记录的事务对性能的影响。

我在其他地方读到过MySQL是为提交而不是回滚而优化的。但是,我还没有找到关于在没有完成工作的情况下启动/提交事务的成本的讨论。

EN

回答 3

Stack Overflow用户

发布于 2020-08-24 23:13:55

请记住,一旦您读取了InnoDB表,无论您是否显式地“启动了事务”,InnoDB都会做类似的工作。

启动事务的替代方法是依赖于自动提交。但是,自动提交并不意味着没有事务发生。自动提交意味着当您的查询触摸到InnoDB表时事务将隐式启动,并且在查询完成后事务将自动提交。您不能运行多个语句,也不能回滚,但否则它与显式事务相同。

试图避免启动事务并不能真正节省任何费用。

票数 3
EN

Stack Overflow用户

发布于 2020-08-24 21:28:13

在短期运行的事务中没有显著的成本。

当实际进行更改时,事务的最低成本开始发生。

只有在回滚过程中需要更改数据时,回滚才会很昂贵,否则这将是一个相当空的操作。

在没有任何更改的情况下提交(可能是回滚)不应招致任何惩罚。

票数 2
EN

Stack Overflow用户

发布于 2020-08-25 05:07:58

这肯定是一种开销,它可能相当重要。最近,我与一个客户端进行了合作,该客户端确实存在此问题(由于ORM中的一个错误,大量的空提交),他们的数据库在空提交时消耗了大约30%的CPU。

用long_query_time=0 (重要!)捕获一天的缓慢日志,将其放在mysqldumpslow或pt查询摘要中,看看是否有一个只消耗大量COMMIT;的查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63568824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档