独立的应用程序会导致回滚到彼此的事务吗?

Ami*_*mar 4 sql-server transaction rollback dbms data-tier-application

我有一个建立在 SQL Server 上的数据库

应用程序 1 [旧版应用程序]:

用 C# 编写,并在上述数据库上运行事务。

应用程序 2 [正在开发的新应用程序]:

用 Python 编写,并在上述数据库上运行事务。

注意事项:

  • 这些应用程序访问同一组表并执行类似的操作。

  • 随着时间的推移,我们正在尝试从较旧的应用程序过渡到较新的应用程序。

  • 我发现系统中发生了几个死锁和回滚。

问题

  1. 我想了解通过一个应用程序运行的事务是否有可能影响来自独立的其他应用程序的事务。

  2. 这些场景是由 DBMS 本身在内部处理还是必须在应用程序级别处理?

Low*_*n M 6

我想了解通过一个应用程序运行的事务是否有可能影响来自独立的其他应用程序的事务。

直接,没有。每个事务根据定义都是一个“单一工作单元”,并且是本地的。也就是说,我的交易不能成为你交易的一部分。我不能明确告诉你回滚或提交。

但是,如果两个事务处理相同的数据,它们会相互影响。如果两个事务之间发生死锁,一个是受害者(被杀死),另一个成功。在这种情况下,我的事务导致数据库引擎对您的事务发出回滚,但我的事务中没有任何内容直接影响您的事务。虽然永远无法 100% 避免死锁,但有一些方法可以减轻死锁的风险和影响

正如 El.Ham 所提到的,单独的事务也会导致阻塞,从而导致查询暂停。这可能会导致应用程序缓慢甚至超时,具体取决于您的连接配置方式。

这些场景是由 DBMS 本身在内部处理还是必须在应用程序级别处理?

这取决于。如果您关心的是死锁(我认为是),那么您可能希望应用程序具有重试逻辑,以便自动重试死锁事务。这可以通过T-SQL或在应用程序级别完成