2011-06-08 55 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