dub*_*ech 5 sql-server-2008 sql-server
考虑两种更新数据的方法:
Approach 1:
Update Table 1, commit
Update Table 2, commit
Update Table 3, commit
Approach 2:
Update Table 1, Table 2, Table 3, commit.
Run Code Online (Sandbox Code Playgroud)
现在方法 1 不是原子的并且使用三个事务。然而,可以说方法 2 会更长时间地挂在锁上,因此也不会扩展。在不需要真正原子性的场景中,是否可以论证方法 1 的性能会更好,因为它不会长时间挂在锁上。
问题是,您需要统计数据和证据来做出良好的架构决策,而不仅仅是推测。我想为 SqlServer 设置跟踪,以便我可以了解两种方法之间的性能差异有多大?我想知道是1ms还是500ms?
我猜不是那么多,但希望证实我的怀疑。
非常感谢。
所有写锁都保持到事务结束。否则回滚是不可能的。在考虑事务的跨度时,首先要问的问题是“从业务规则的角度来看,每个操作是否使数据库处于一致状态?. 如果这是真的,那么操作可以在单独的事务中完成。如果不为真,则包含的事务必须跨越所有操作,否则您可能会使数据库处于不一致状态(想想典型的借记账户/贷记账户交易)。