这个应用程序运行在AWS EC2上,使用RDS/MySQL (5.7)。
我们有一个审计脚本,它访问MySQL用户表中的每个用户。\
对于每个用户,我们
现在,在步骤2中很可能(也很常见)没有对任何表进行任何更改。在代码检查过程中,出现了一个问题,即在没有进行任何更改的情况下,启动/提交多个记录的事务对性能的影响。
我在其他地方读到过MySQL是为提交而不是回滚而优化的。但是,我还没有找到关于在没有完成工作的情况下启动/提交事务的成本的讨论。
发布于 2020-08-24 23:13:55
请记住,一旦您读取了InnoDB表,无论您是否显式地“启动了事务”,InnoDB都会做类似的工作。
启动事务的替代方法是依赖于自动提交。但是,自动提交并不意味着没有事务发生。自动提交意味着当您的查询触摸到InnoDB表时事务将隐式启动,并且在查询完成后事务将自动提交。您不能运行多个语句,也不能回滚,但否则它与显式事务相同。
试图避免启动事务并不能真正节省任何费用。
发布于 2020-08-24 21:28:13
在短期运行的事务中没有显著的成本。
当实际进行更改时,事务的最低成本开始发生。
只有在回滚过程中需要更改数据时,回滚才会很昂贵,否则这将是一个相当空的操作。
在没有任何更改的情况下提交(可能是回滚)不应招致任何惩罚。
发布于 2020-08-25 05:07:58
这肯定是一种开销,它可能相当重要。最近,我与一个客户端进行了合作,该客户端确实存在此问题(由于ORM中的一个错误,大量的空提交),他们的数据库在空提交时消耗了大约30%的CPU。
用long_query_time=0 (重要!)捕获一天的缓慢日志,将其放在mysqldumpslow或pt查询摘要中,看看是否有一个只消耗大量COMMIT;的查询。
https://stackoverflow.com/questions/63568824
复制相似问题