数据库端事务拆分与应用程序端事务拆分

时间:2019-06-13 13:43:36

标签: c# sql sql-server transactions synchronization

我正在使用C#+ SqlServer应用程序处理大量数据负载。

目前,我们的主要问题涉及大规模的单一交易DELETE操作:DBA建议将该单一的单笔交易拆分为许多交易,以获得以下结果:

  1. 较小的交易记录
  2. 在超时错误的情况下减少要回滚的行
  3. 由于减少了交易时间,减少了同步化/锁定问题

(在我们的方案中,放弃单个事务的原子性不是问题:在语义上我们可以执行TRUNCATE,但不能执行,因为我们正在过滤要删除的行)

我想知道在发出单个(Transact)SQL语句(包含像

这样的循环)之间,在事务管理和同步方面是否有任何区别?
SET @r = 1;
WHILE @r > 0
BEGIN
  BEGIN TX;

  DELETE TOP (100000)
    [OUR_BIG_TABLE]
    WHERE ...;

  SET @r = @@ROWCOUNT;

  COMMIT TX;
END

并循环应用程序(C#)代码,在不同的,由客户端处理的事务中发出多个DELETE TOP(100000) ...

我的感觉是由于减少了网络往返,单SQL语句具有更好的性能。 相反,我对删除活动与同一表上的其他并发活动之间的同步/锁定有疑问;因此,我的问题具体是:在上述方法之间是否存在差异,即另一客户发出的交易是否可以在我们的流程发出的交易之间交织

我认为建议的方法之间没有区别(从上述观点来看),因为客户控制的交易等同于BEGIN TX ... COMMIT TX语句,但是我更喜欢谁比我了解更多...

提前谢谢!

0 个答案:

没有答案
相关问题