tempdb SQL Server锁定

时间:2009-12-07 14:27:13

标签: sql-server transactions locking tempdb

我们的应用程序与客户机器上的另一个应用程序一起运行。 我们已经做了一些努力来避免tempdb中长时间运行的锁,因为这显然会严重影响并发性。 然而,另一个应用程序会执行以下操作:


开始交易
创建#Table(...);
插入#Table(....)值(...);
operation_for_totally_six_seconds()。
提交;

由于操作需要时间,我们的应用程序会等待其他应用程序获取的锁定。

现在,我希望有一种方法可以将我的应用程序与其他应用程序隔离,例如告诉sql server为我分配另一个tempdb,但我还没有找到办法。这在某种程度上是可行的,还是在另一个mssql-instance上安装我们的数据库的解决方案?

此致 Jens Nordenbro

2 个答案:

答案 0 :(得分:3)

  

从而在tempdb中长时间运行锁定   这显然会影响并发性   严重

这实际上并不明显。只有当您和其他应用程序执行相同的锁定时,长时间锁定才是重要的。您发布的代码示例完全合法。首先,#temp是一个特定于连接的表,没有其他连接甚至可以看到它。但即使它是全局资源,它也属于另一个应用程序,因此你就没有企业获得锁定。

作为练习,打开SSMS查询窗口并运行:

begin transaction;
create table #temp (a int);

然后opne第二个查询窗口并运行相同的。尽管创建了相同的#temp表,但QED并没有相互阻挡。

如果tempdb确实是一个瓶颈,你需要做更多的调查,找到发生争用的实际资源。

答案 1 :(得分:1)

一种选择是在同一台计算机上的不同sql server实例中运行您的应用程序。这样你就拥有了自己的tempdb。