2011-10-16 40 views
0

我在SQL Server 2008中有大約70列的大表。多線程.NET應用程序正在調用數據庫上的存儲過程以插入/更新表。頻率大約是每秒3次。在SQL Server上插入/更新表鎖定

由於幾乎每個查詢在表上都有一個datetime約束,我已經在表上做了每週分區。

有時插入/更新表格需要很長時間。我懷疑有時INSERTION會使UPDATE等待;有時UPDATE會使INSERTION等待。可能嗎?

我該如何設計表格來避免這種鎖?性能是這裏的主要問題。

+0

是否可以批量插入條目?如果是這樣,您可以累積一分鐘的值並進行批量插入。還要檢查在該表上的觸發器中是否執行了任何性能密集型操作。 –

+0

批量插入是不可能的。因爲每個記錄都是通過Web服務調用接收的 –

+0

表的讀取頻率如何?如果表經常被讀取,你可能會考慮在選擇查詢中使用「noLock」。同樣,如果更新不會基於相同的主鍵來執行,您也可以考慮更新/插入中的nolock。 –

回答

-1

你說得對,你可能正在造成死鎖,導致事情等待。首先要檢查幾件事情;

  1. 索引是否正確?
  2. 如果您的數據庫處於「完全」恢復模式,您是否需要它?簡單恢復確實可以加快插入/更新速度,但是對於備份而言,您恢復了時間點恢復。
  3. 您是否可能有多個線程編寫相同的記錄?如果不是,NOLOCK可能是你的朋友,但這意味着你的數據可能會偶爾出現一兩次。
+3

NOLOCK是否可用於插入/更新? –

+0

NOLOCK提示不可用於插入/更新「READPAST,NOLOCK和READUNCOMMITTED不允許」(來源:http://msdn.microsoft.com/en-us/library/aa260662(v=sql.80)的.aspx) – Gibron