2011-06-08 78 views
2

查询临时表时取出锁吗?如果是这样,默认情况下它们的粒度如何?是否有类似于锁定正常行/表的性能?SQL:锁定临时表

我认为没有进行锁定,因为每个实例都创建了临时表(至少从SQL 2008开始)。

select x,y,z into #MyTempTable 
from SomeOtherTable 
+0

http://stackoverflow.com/questions/1302670/sql-server-select-into-and-blocking-with-temp-tables – 2011-06-08 03:46:43

+0

@米奇,这是一个很好看,我也没多想TempDB。我特意询问#MyTempTable。这些长时间运行的查询在任何地方都使用临时表,就像它是一种宗教信仰,我只是想知道锁是否会损害性能。 – 2011-06-08 03:53:21

+0

你确定你有tempDB瓶颈吗?它是否在自己的RAID 10阵列上? – 2011-06-08 03:55:30

回答

1
  • 像这样的临时表是本地的连接。它不会影响并发性,因为没有其他人可以读取它。

  • 临时表一般表现得就像并发性,隔离,锁,交易等普通表

  • 你可能(或可能不会!)得到tempdb contention (link about TF 1118)重载这是不一样的表锁定

  • 您的问题是由其中一个SQL Server 6.x myths (DBA.SE)提示的吗?

+0

@Andriy M:那几乎是不可能的。每个连接可以有一个请求,并且所有的请求都被序列化到数据库。在同一连接对象中使用多个线程的应用程序只会非常快速地崩溃(甚至有可能吗?) – gbn 2011-06-08 05:19:26

+0

您是对的。我开始考虑共享连接并忘记并发性(即使这个问题基本上是关于并发性的,我很傻)。 – 2011-06-08 05:57:52

+0

我的问题是,在临时表上取出锁吗?而不是tempdb,临时表#MyTempTable。我应该提供nolock提示或可能强制tablock选择,插入,更新,从#MyTempTable – 2011-06-08 12:50:06