Bin*_*rus 5 mysql innodb transactions
免责声明:
我已经阅读了对于更便宜/更快的无写交易:COMMIT 还是 ROLLBACK?,这与我的问题类似,但与 MS SQL Server 相关,并且已经很老了。此外,答案不知何故让我感到惊讶,所以我想知道 MySQL 5.7 在 2018 年的情况如何。
说了这么多:
假设以下场景:
BEGIN一个交易。SELECT ... FOR UPDATE锁定表中的几行(在大多数情况下,一行)。现在我想完成交易。我可以用正常的方式来做到这一点,即通过发出 a COMMIT,在这种情况下只会删除锁,或者作为替代,通过发出 a ROLLBACK,在这种情况下也只会删除锁。
这两种方法的结果是一样的,但我的感觉是成本/性能可能会有很大差异。
如果被锁定的行的比例总是可以忽略不计(即像 1/1e6 这样的东西),有人可以告诉我推荐哪种方法,并且可能给出一些背景(或一些背景的链接)?
(警告:这个答案是有根据的猜测,但可能是错误的。)
提交/回滚的通常用途是实际进行更改,然后撤消它们。InnoDB 是乐观的,因为它假设事务将被提交。也就是说,它最大限度地提高了更改(插入、更新等)的效率,而不是针对回滚进行优化。因此,ROLLBACK比 更昂贵(有时“更多”)COMMIT。潜在回滚的内容保存在撤消日志中,最终需要清理。但此清理工作是“稍后”完成的,而不是在用户等待COMMIT完成时完成。
您的使用不涉及任何实际更改,因此我猜测性能是相似的。我可能会ROLLBACK向未来的读者(包括你自己)明确表示“什么也没做”。
由于撤消内容的笨拙部分是行的旧副本,而您的情况不会生成这样的副本,因此我看不出有什么区别。
您的链接引用的是 SQL Server,它可能有不同的算法。
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |