我有一个非常普遍的问题:
1。)鉴于我有一个事务(在mysql中),包括修改十万/十万甚至百万条记录。与非常“小”的交易相比,这类交易是否线性昂贵?或者大型交易是否会比小型交易消耗更多的资源? (换句话说,必须避免)。
2。)在提交如此大的事务时,mysql上的负载是否会跳转到一个非常高的值,直到事务被完全处理为止是真的吗?
该问题主要与MySQL有关,但如果服务器“更好”,那么听到它们会很有趣。是的,服务器/系统有很多来自其他进程的负载(因此它不是系统上处理的唯一事务=中/高争用)。隔离级别是“更高/最高”的隔离级别(带来实际交易的所有好处)。
非常感谢
答案 0 :(得分:2)
这不是一个完整的回复,我希望有人会就这个问题给你一些有用的提示。
但我可以给你至少一个小费。
肯定有可序列化隔离级别,您遇到的最大问题是当您的交易时间很长时,您有很多机会自动回滚由引擎。在可序列化的隔离级别中,如果任何其他事务提交更改受影响数据之一的事务,则事务将关闭。在序列化隔离级别中,您必须将您的事务视为您可能需要多次重做的事情,直到它没问题。所以... 如果它很大并且你并不孤单它可能会变得很长,或者可能无法运行。
如果我们谈论在可序列化事务中更改一百万行表的所有行,你肯定必须放置一个应用程序级别锁,或一个信号量,高于数据库事务的东西,告诉其他进程你正在制作一项繁重的任务,他们应该稍等一下,让你做一项重要的任务: - )
但是,如果您可以将此流程视为每行的维护任务,并且您的环境不是某些行处于新状态而另一些行尚未处理的问题...那么请为每个行执行一个事务排,而不是一个大的。只有当所有受影响的行在同一时间切换其状态非常重要时,才应该执行大的可序列化事务(这是Atomicity)。可能情况并非如此,是吗?