我们的应用程序与客户机器上的另一个应用程序一起运行。我们已经做出了一些努力,以避免长时间运行的锁在tempdb中,因为这显然严重影响并发。但是,另一个应用程序做的事情如下:
begin事务
**create #Table(...);** **insert into #Table(....) values(...);** **operation\_for\_totally\_six\_seconds().** 提交;
由于操作需要时间,我们的应用程序被困在等待其他应用程序所要求的锁。
现在,我希望有一种方法将我的应用程序与另一个应用程序隔离开来,例如告诉sql server为我分配另一个tempdb,但我没有找到一种方法。这在某种程度上是可能的,还是将我们的数据库安装在另一个mssql实例上的解决方案?
你好,延斯·诺登布罗
发布于 2009-12-07 16:48:28
长时间运行的锁,因为这显然严重影响并发性。
这一点其实一点也不明显。只有当您和其他应用程序使用相同的锁时,长期持有的锁才是重要的。您发布的代码示例是完全合法的。首先,#temp是一个特定于连接的表,其他连接甚至看不到它。但是,即使它是全局资源,它也属于另一个应用程序,因此您将没有获得锁的业务。
作为练习,打开SSMS查询窗口并运行以下操作:
begin transaction;
create table #temp (a int);然后打开第二个查询窗口并运行相同的查询窗口。尽管创建了非常相同的#temp表,但QED并不彼此阻塞。
如果tempdb确实是一个瓶颈,那么您需要做更多的调查,并找到发生争用的实际资源。
发布于 2009-12-07 14:43:16
一种选择是在同一台机器上在不同的sql server实例中运行应用程序。这样你就有了自己的tempdb。
https://stackoverflow.com/questions/1860297
复制相似问题