我正在使用MSSQL Server 2008.我必须一次使用多个数据库。系统会给出一些错误"交易超时"当插入或更新记录时。但它会在几分钟后发挥作用 很少有用户使用差异Windows应用程序来操纵数据库中的数据 我想知道, 这个问题和多个数据库使用之间有什么关系吗? 此查询类型(查询中链接的多个数据库)是否会影响超时?
答案 0 :(得分:1)
高度取决于超时的原因。当资源被一个应用程序锁定而第二个应用程序等待时间过长时,通常会导致这种情况。即使在单个实例中,多个数据库也在使用Distibuted Transaction Coordinator。
数据库引擎的单个实例中的事务 跨越两个或多个数据库实际上是分布式事务。该 instance在内部管理分布式事务;给用户, 它作为本地交易运作。 http://technet.microsoft.com/en-us/library/jj856598(v=sql.110).aspx
并且DTC比在同一数据库范围内工作慢得多,因此它会导致数据锁定的时间范围更广,并可能导致超时。
答案 1 :(得分:1)
如果您正在使用SqlConnection
,SqlCommand
和Transaction
,则可能需要检查并设置每个超时属性,以便正确管理您的应用行为。
请参阅TransactionOptions了解IsolationLevel
和TimeOut
(第一个可能必须是Required
)
如果您正在使用命令,请参阅SqlCommand.CommandTimeout。
使用交易的好方法可能是
TimeSpan timeout = TimeSpan.FromSeconds(300); // 5 minutes
using(TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, timeout))
{
// Code ...
}
请记住,许多并发事务可能会影响SQL Server效率。也许您需要同一服务器的不同实例才能正确使用它,但缺点是每个实例同步。