【问题标题】:MSSQL Timeout errorMSSQL 超时错误
【发布时间】:2014-06-11 06:32:05
【问题描述】:

我使用的是 MSSQL Server 2008。我必须同时使用多个数据库。一些大部头在insertupdate 记录时系统会给出错误“Transaction Timeout”。但它会在几分钟后起作用。
很少有用户使用差异 Windows 应用程序来操作数据库中的数据。
我想知道, 这个问题和多个数据库使用之间有什么关系吗? 这种查询类型(查询中链接的多个数据库)是否会影响超时?

【问题讨论】:

  • 您是直接使用它还是通过某种客户端应用程序使用它?
  • 使用客户端应用程序。有几个客户端应用程序。
  • C# windows 窗体应用程序

标签: c# sql sql-server sql-server-2008 tsql


【解决方案1】:

很大程度上取决于超时的原因。这通常是由一个应用程序锁定资源而第二个应用程序等待时间过长引起的。多个数据库,甚至在单个实例中,都在使用分布式事务协调器。

数据库引擎的单个实例中的事务 跨越两个或多个数据库实际上是一个分布式事务。这 实例内部管理分布式事务;对用户, 它作为本地事务运行。 http://technet.microsoft.com/en-us/library/jj856598(v=sql.110).aspx

而且 DTC 比在同一个数据库范围内工作要慢得多,因此它会导致数据被锁定更长的时间范围,并可能导致超时。

【讨论】:

    【解决方案2】:

    如果您使用SqlConnectionSqlCommandTransaction,您可能需要检查并设置每个超时属性以正确管理您的应用程序行为。

    IsolationLevelTimeOut 请参见 TransactionOptions(第一个可能必须是 Required

    如果您正在使用命令,请参阅SqlCommand.CommandTimeout

    使用事务的好方法可能是

    TimeSpan timeout = TimeSpan.FromSeconds(300); // 5 minutes
    
    using(TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, timeout))
    {
            // Code ...
    }
    

    请记住,大量并发事务可能会影响 SQL Server 效率。也许您需要同一服务器的不同实例才能正确使用它,但缺点是每个实例的同步。

    【讨论】:

      猜你喜欢
      • 2018-06-20
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2016-06-20
      • 1970-01-01
      相关资源
      最近更新 更多